@shopify/shop-minis-cli 0.0.220 → 0.0.222
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.
|
@@ -63,20 +63,91 @@ export const setMiniManifestProxies = (proxies, manifestPath = DEFAULT_MANIFEST_
|
|
|
63
63
|
encoding: 'utf-8',
|
|
64
64
|
});
|
|
65
65
|
};
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Validates CSP (Content Security Policy) host-source expressions
|
|
68
|
+
* Format: [*.]hostname[/path/] (paths must end with trailing slash)
|
|
69
|
+
*
|
|
70
|
+
* Valid examples:
|
|
71
|
+
* - example.com
|
|
72
|
+
* - *.example.com
|
|
73
|
+
* - example.com/path/
|
|
74
|
+
* - example.com/path/to/resource/
|
|
75
|
+
*
|
|
76
|
+
* Invalid:
|
|
77
|
+
* - https://example.com (protocols not allowed)
|
|
78
|
+
* - example.com:443 (ports not allowed)
|
|
79
|
+
* - example.com/path (paths must end with /)
|
|
80
|
+
* - values with escape characters (\n, \r, \t, etc.)
|
|
81
|
+
* - values with whitespace or CSP-breaking characters
|
|
82
|
+
*
|
|
83
|
+
* @returns null if valid, or an error message string if invalid
|
|
84
|
+
*/
|
|
85
|
+
function validateCspSource(source) {
|
|
86
|
+
// Reject empty strings
|
|
87
|
+
if (!source || source.length === 0) {
|
|
88
|
+
return 'Domain cannot be empty';
|
|
78
89
|
}
|
|
79
|
-
|
|
90
|
+
// Reject escape characters and control characters
|
|
91
|
+
// eslint-disable-next-line no-control-regex
|
|
92
|
+
if (/[\x00-\x1f\x7f\\]/.test(source)) {
|
|
93
|
+
return 'Domain contains invalid characters';
|
|
94
|
+
}
|
|
95
|
+
// Reject whitespace (spaces, tabs, newlines encoded as literal characters)
|
|
96
|
+
if (/\s/.test(source)) {
|
|
97
|
+
return 'Domain cannot contain whitespace';
|
|
98
|
+
}
|
|
99
|
+
// Reject CSP-breaking characters: semicolons, quotes, angle brackets, commas
|
|
100
|
+
if (/[;<>"',]/.test(source)) {
|
|
101
|
+
return 'Domain contains invalid characters';
|
|
102
|
+
}
|
|
103
|
+
// Reject protocols (anything that looks like scheme://)
|
|
104
|
+
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(source)) {
|
|
105
|
+
return 'Domain should not include protocol (e.g., remove https://)';
|
|
106
|
+
}
|
|
107
|
+
// Reject bare protocol indicators (e.g., javascript:, data:)
|
|
108
|
+
// Only applies when there's no dot before the colon (real hostnames have dots)
|
|
109
|
+
const colonIndex = source.indexOf(':');
|
|
110
|
+
if (colonIndex > 0) {
|
|
111
|
+
const beforeColon = source.substring(0, colonIndex);
|
|
112
|
+
// If no dot before colon and followed by non-digit, it's likely a protocol scheme
|
|
113
|
+
if (!beforeColon.includes('.') &&
|
|
114
|
+
/^[a-zA-Z][a-zA-Z0-9+-]*$/.test(beforeColon) &&
|
|
115
|
+
!/^:\d/.test(source.substring(colonIndex))) {
|
|
116
|
+
return 'Domain should not include protocol scheme';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Parse the source into components: hostname, optional path (no ports allowed)
|
|
120
|
+
// Match: [*.]hostname[/path]
|
|
121
|
+
const cspSourceRegex = /^(\*\.)?([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*)(\/[^\s]*)?$/;
|
|
122
|
+
const match = source.match(cspSourceRegex);
|
|
123
|
+
if (!match) {
|
|
124
|
+
return 'Invalid domain format. Use format: hostname or *.hostname';
|
|
125
|
+
}
|
|
126
|
+
const [, wildcardPrefix, hostname, , , , pathPart] = match;
|
|
127
|
+
// All domains must have at least one dot (e.g., example.com, not just "example")
|
|
128
|
+
if (!hostname.includes('.')) {
|
|
129
|
+
if (wildcardPrefix) {
|
|
130
|
+
// Wildcard needs second-level domain (e.g., *.example.com, not *.com)
|
|
131
|
+
return 'Wildcard domains require at least a second-level domain (e.g., *.example.com, not *.com)';
|
|
132
|
+
}
|
|
133
|
+
return 'Domain must include a top-level domain (e.g., example.com)';
|
|
134
|
+
}
|
|
135
|
+
// Validate path doesn't contain dangerous sequences
|
|
136
|
+
if (pathPart) {
|
|
137
|
+
// Paths must end with a trailing slash
|
|
138
|
+
if (!pathPart.endsWith('/')) {
|
|
139
|
+
return 'Paths must end with a trailing slash (e.g., /path/ instead of /path)';
|
|
140
|
+
}
|
|
141
|
+
// Reject paths with encoded dangerous characters or unusual patterns
|
|
142
|
+
if (/%[0-9a-fA-F]{2}/.test(pathPart)) {
|
|
143
|
+
// Allow common safe URL encodings but reject potential bypasses
|
|
144
|
+
const dangerousEncodings = /%0[aAdD]|%09|%00|%3[cCeE]|%22|%27|%3[bB]/i;
|
|
145
|
+
if (dangerousEncodings.test(pathPart)) {
|
|
146
|
+
return 'Path contains invalid characters';
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
80
151
|
}
|
|
81
152
|
function formatFriendlyManifestError(error) {
|
|
82
153
|
// Map technical jsonschema errors to friendly, actionable messages
|
|
@@ -107,8 +178,11 @@ export function validateManifest(manifestPath) {
|
|
|
107
178
|
if (Array.isArray(manifest.trusted_domains)) {
|
|
108
179
|
manifest.trusted_domains.forEach((domain) => {
|
|
109
180
|
// Only validate string domains (non-strings are already caught by JSON schema)
|
|
110
|
-
if (typeof domain === 'string'
|
|
111
|
-
|
|
181
|
+
if (typeof domain === 'string') {
|
|
182
|
+
const error = validateCspSource(domain);
|
|
183
|
+
if (error) {
|
|
184
|
+
validationErrors.push(`Invalid trusted_domains entry "${domain}": ${error}`);
|
|
185
|
+
}
|
|
112
186
|
}
|
|
113
187
|
});
|
|
114
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minis-manifest.js","sourceRoot":"","sources":["../../src/utils/minis-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAC,UAAU,EAAE,aAAa,EAAC,MAAM,SAAS,CAAA;AAEjD,OAAO,EAAC,UAAU,EAAC,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAA;AAIpC,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAA;AAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;AAEtE,MAAM,UAAU,cAAc;IAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,qBAAqB,CAAC,CAAA;IAC5E,OAAO,UAAU,CAAC,gBAAgB,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,YAAY,GAAG,qBAAqB;IAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAA;IACnE,IAAI,QAAa,CAAA;IACjB,IAAI;QACF,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;KACrC;IAAC,OAAO,GAAQ,EAAE;QACjB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;QAC9C,IAAI,YAAY,EAAE;YAChB,IAAI;gBACF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;gBACnC,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;aAC1D;YAAC,MAAM;gBACN,QAAQ,GAAG,IAAI,CAAA;aAChB;YAED,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,uCAAuC,YAAY,EAAE,CAAC,CAAA;aACvE;SACF;aAAM;YACL,IAAI,YAAY,GAAG,qCAAqC,YAAY,EAAE,CAAA;YACtE,IAAI,GAAG,EAAE,IAAI,KAAK,aAAa,EAAE;gBAC/B,YAAY,GAAG,wDAAwD,YAAY,IAAI,CAAA;aACxF;iBAAM,IAAI,GAAG,EAAE,IAAI,KAAK,kBAAkB,EAAE;gBAC3C,YAAY,GAAG,yEAAyE,YAAY,IAAI,CAAA;aACzG;YACD,MAAM,IAAI,UAAU,CAAC,mCAAmC,EAAE,YAAY,CAAC,CAAA;SACxE;KACF;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,YAAY,GAAG,qBAAqB,EAC1B,EAAE;IACZ,OAAO,eAAe,CAAC,YAAY,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAAkB,EAClB,YAAY,GAAG,qBAAqB,EACpC,EAAE;IACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAA;IACnE,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAElD,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAEhC,aAAa,CACX,gBAAgB,EAChB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAC5C;QACE,QAAQ,EAAE,OAAO;KAClB,CACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,OAAwB,EACxB,YAAY,GAAG,qBAAqB,EACpC,EAAE;IACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAA;IACnE,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAElD,YAAY,CAAC,OAAO,GAAG,OAAO,CAAA;IAE9B,aAAa,CACX,gBAAgB,EAChB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAC5C;QACE,QAAQ,EAAE,OAAO;KAClB,CACF,CAAA;AACH,CAAC,CAAA;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"minis-manifest.js","sourceRoot":"","sources":["../../src/utils/minis-manifest.ts"],"names":[],"mappings":"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"}
|