@plotpaper/cli 0.2.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/bin/plotpaper.js +2 -0
- package/dist/bundler/index.d.ts +17 -0
- package/dist/bundler/index.js +53 -0
- package/dist/bundler/index.js.map +1 -0
- package/dist/bundler/rewrite.d.ts +13 -0
- package/dist/bundler/rewrite.js +93 -0
- package/dist/bundler/rewrite.js.map +1 -0
- package/dist/bundler/transform.d.ts +7 -0
- package/dist/bundler/transform.js +66 -0
- package/dist/bundler/transform.js.map +1 -0
- package/dist/bundler/wrap.d.ts +6 -0
- package/dist/bundler/wrap.js +21 -0
- package/dist/bundler/wrap.js.map +1 -0
- package/dist/commands/bundle.d.ts +6 -0
- package/dist/commands/bundle.js +97 -0
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/submit.d.ts +8 -0
- package/dist/commands/submit.js +114 -0
- package/dist/commands/submit.js.map +1 -0
- package/dist/commands/validate.d.ts +4 -0
- package/dist/commands/validate.js +97 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/api.d.ts +15 -0
- package/dist/utils/api.js +56 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/config.d.ts +9 -0
- package/dist/utils/config.js +73 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/validation/imports.d.ts +5 -0
- package/dist/validation/imports.js +33 -0
- package/dist/validation/imports.js.map +1 -0
- package/dist/validation/index.d.ts +27 -0
- package/dist/validation/index.js +79 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/patterns.d.ts +8 -0
- package/dist/validation/patterns.js +38 -0
- package/dist/validation/patterns.js.map +1 -0
- package/dist/validation/schema.d.ts +209 -0
- package/dist/validation/schema.js +181 -0
- package/dist/validation/schema.js.map +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Plotpaper CLI — validate, bundle, and submit mini apps
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const commander_1 = require("commander");
|
|
7
|
+
const validate_1 = require("./commands/validate");
|
|
8
|
+
const bundle_1 = require("./commands/bundle");
|
|
9
|
+
const submit_1 = require("./commands/submit");
|
|
10
|
+
const program = new commander_1.Command();
|
|
11
|
+
program
|
|
12
|
+
.name("plotpaper-cli")
|
|
13
|
+
.description("CLI for building and submitting Plotpaper mini apps")
|
|
14
|
+
.version("0.1.0");
|
|
15
|
+
// ── validate ────────────────────────────────────────────────────────────
|
|
16
|
+
program
|
|
17
|
+
.command("validate <file>")
|
|
18
|
+
.description("Validate a mini app source file against all rules")
|
|
19
|
+
.option("-s, --schema <path>", "Path to schema.json file")
|
|
20
|
+
.action(async (file, options) => {
|
|
21
|
+
await (0, validate_1.runValidate)(file, options);
|
|
22
|
+
});
|
|
23
|
+
// ── bundle ──────────────────────────────────────────────────────────────
|
|
24
|
+
program
|
|
25
|
+
.command("bundle <file>")
|
|
26
|
+
.description("Bundle a mini app source file into an IIFE")
|
|
27
|
+
.option("-o, --output <path>", "Output file path (default: <file>.bundle.js)")
|
|
28
|
+
.option("--bundle-id <id>", "Custom bundle ID (default: random UUID)")
|
|
29
|
+
.option("-s, --schema <path>", "Path to schema.json file")
|
|
30
|
+
.action(async (file, options) => {
|
|
31
|
+
await (0, bundle_1.runBundle)(file, options);
|
|
32
|
+
});
|
|
33
|
+
// ── submit ──────────────────────────────────────────────────────────────
|
|
34
|
+
program
|
|
35
|
+
.command("submit <file>")
|
|
36
|
+
.description("Submit a mini app to the Plotpaper platform")
|
|
37
|
+
.requiredOption("-e, --email <email>", "Your registered Plotpaper email")
|
|
38
|
+
.option("-n, --name <name>", "App name (default: filename)")
|
|
39
|
+
.option("-d, --description <desc>", "App description")
|
|
40
|
+
.option("-m, --mode <mode>", "App mode: private or multiplayer", "private")
|
|
41
|
+
.option("-s, --schema <path>", "Path to schema.json file")
|
|
42
|
+
.action(async (file, options) => {
|
|
43
|
+
await (0, submit_1.runSubmit)(file, {
|
|
44
|
+
email: options.email,
|
|
45
|
+
name: options.name,
|
|
46
|
+
description: options.description,
|
|
47
|
+
mode: options.mode || "private",
|
|
48
|
+
schema: options.schema,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
program.parse();
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yDAAyD;AACzD,gFAAgF;;AAEhF,yCAAoC;AACpC,kDAAkD;AAClD,8CAA8C;AAC9C,8CAA8C;AAE9C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,2EAA2E;AAC3E,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA4B,EAAE,EAAE;IAC3D,MAAM,IAAA,sBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,2EAA2E;AAC3E,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,qBAAqB,EAAE,8CAA8C,CAAC;KAC7E,MAAM,CAAC,kBAAkB,EAAE,yCAAyC,CAAC;KACrE,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAgE,EAAE,EAAE;IAC/F,MAAM,IAAA,kBAAS,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,2EAA2E;AAC3E,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,cAAc,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KACxE,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,kCAAkC,EAAE,SAAS,CAAC;KAC1E,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA+F,EAAE,EAAE;IAC9H,MAAM,IAAA,kBAAS,EAAC,IAAI,EAAE;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAG,OAAO,CAAC,IAAkC,IAAI,SAAS;QAC9D,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SubmitPayload {
|
|
2
|
+
email: string;
|
|
3
|
+
sourceCode: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
schema?: any;
|
|
7
|
+
permissions?: any;
|
|
8
|
+
appMode: "private" | "multiplayer";
|
|
9
|
+
}
|
|
10
|
+
export interface SubmitResult {
|
|
11
|
+
appId: string;
|
|
12
|
+
versionId?: string;
|
|
13
|
+
creditsCharged?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function submitApp(payload: SubmitPayload): Promise<SubmitResult>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// API Client for Plotpaper Platform
|
|
4
|
+
// =============================================================================
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.submitApp = submitApp;
|
|
10
|
+
const https_1 = __importDefault(require("https"));
|
|
11
|
+
const http_1 = __importDefault(require("http"));
|
|
12
|
+
async function submitApp(payload) {
|
|
13
|
+
const apiUrl = process.env.PLOTPAPER_API_URL || "https://vd9d2wo194.execute-api.ap-southeast-1.amazonaws.com/prod";
|
|
14
|
+
const url = new URL("/api/custom-apps/submit", apiUrl);
|
|
15
|
+
const body = JSON.stringify(payload);
|
|
16
|
+
const isHttps = url.protocol === "https:";
|
|
17
|
+
const httpModule = isHttps ? https_1.default : http_1.default;
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const req = httpModule.request(url, {
|
|
20
|
+
method: "POST",
|
|
21
|
+
headers: {
|
|
22
|
+
"Content-Type": "application/json",
|
|
23
|
+
"Content-Length": Buffer.byteLength(body),
|
|
24
|
+
},
|
|
25
|
+
}, (res) => {
|
|
26
|
+
let data = "";
|
|
27
|
+
res.on("data", (chunk) => (data += chunk));
|
|
28
|
+
res.on("end", () => {
|
|
29
|
+
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
30
|
+
try {
|
|
31
|
+
resolve(JSON.parse(data));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
reject(new Error("Invalid response from server"));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
let message = `Server returned ${res.statusCode}`;
|
|
39
|
+
try {
|
|
40
|
+
const parsed = JSON.parse(data);
|
|
41
|
+
if (parsed.error)
|
|
42
|
+
message = parsed.error;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Use status code message
|
|
46
|
+
}
|
|
47
|
+
reject(new Error(message));
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
req.on("error", (err) => reject(new Error(`Network error: ${err.message}`)));
|
|
52
|
+
req.write(body);
|
|
53
|
+
req.end();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oCAAoC;AACpC,gFAAgF;;;;;AAqBhF,8BA8CC;AAjED,kDAA0B;AAC1B,gDAAwB;AAkBjB,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,kEAAkE,CAAC;IACnH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,CAAC,CAAC,cAAI,CAAC;IAE1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAC5B,GAAG,EACH;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;aAC1C;SACF,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;oBACpE,IAAI,CAAC;wBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC5B,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACpD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,OAAO,GAAG,mBAAmB,GAAG,CAAC,UAAU,EAAE,CAAC;oBAClD,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAChC,IAAI,MAAM,CAAC,KAAK;4BAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC3C,CAAC;oBAAC,MAAM,CAAC;wBACP,0BAA0B;oBAC5B,CAAC;oBACD,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// CLI Configuration
|
|
4
|
+
// =============================================================================
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.loadConfig = loadConfig;
|
|
40
|
+
exports.saveConfig = saveConfig;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const CONFIG_DIR = path.join(os.homedir(), ".plotpaper");
|
|
45
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
46
|
+
const DEFAULT_API_URL = "https://api.plotpaper.com";
|
|
47
|
+
function loadConfig() {
|
|
48
|
+
// Env var takes precedence
|
|
49
|
+
const envKey = process.env.PLOTPAPER_API_KEY;
|
|
50
|
+
const envUrl = process.env.PLOTPAPER_API_URL;
|
|
51
|
+
let fileConfig = {};
|
|
52
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
53
|
+
try {
|
|
54
|
+
fileConfig = JSON.parse(fs.readFileSync(CONFIG_FILE, "utf-8"));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Ignore malformed config
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
apiKey: envKey || fileConfig.apiKey,
|
|
62
|
+
apiUrl: envUrl || fileConfig.apiUrl || DEFAULT_API_URL,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function saveConfig(config) {
|
|
66
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
67
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
const existing = loadConfig();
|
|
70
|
+
const merged = { ...existing, ...config };
|
|
71
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2), "utf-8");
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBhF,gCAkBC;AAED,gCAQC;AA1CD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAOzD,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAEpD,SAAgB,UAAU;IACxB,2BAA2B;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAE7C,IAAI,UAAU,GAAoB,EAAE,CAAC;IACrC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM;QACnC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe;KACvD,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,MAAuB;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Import Validation
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateImports = validateImports;
|
|
7
|
+
const patterns_1 = require("./patterns");
|
|
8
|
+
/**
|
|
9
|
+
* Extract all import sources from source code and check against allowed list.
|
|
10
|
+
* Returns list of violations (empty = all good).
|
|
11
|
+
*/
|
|
12
|
+
function validateImports(source) {
|
|
13
|
+
const violations = [];
|
|
14
|
+
// Match ES import statements
|
|
15
|
+
const importRegex = /import\s+(?:[\w*{}\s,]+)\s+from\s+["']([^"']+)["']/g;
|
|
16
|
+
let match;
|
|
17
|
+
while ((match = importRegex.exec(source)) !== null) {
|
|
18
|
+
const mod = match[1];
|
|
19
|
+
if (!patterns_1.ALLOWED_MODULES.includes(mod)) {
|
|
20
|
+
violations.push(`Forbidden import: "${mod}" — only allowed: ${patterns_1.ALLOWED_MODULES.join(", ")}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Match require() calls
|
|
24
|
+
const requireRegex = /require\s*\(\s*["']([^"']+)["']\s*\)/g;
|
|
25
|
+
while ((match = requireRegex.exec(source)) !== null) {
|
|
26
|
+
const mod = match[1];
|
|
27
|
+
if (!patterns_1.ALLOWED_MODULES.includes(mod)) {
|
|
28
|
+
violations.push(`Forbidden require: "${mod}" — only allowed: ${patterns_1.ALLOWED_MODULES.join(", ")}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return violations;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/validation/imports.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;;AAQhF,0CAuBC;AA7BD,yCAA6C;AAE7C;;;GAGG;AACH,SAAgB,eAAe,CAAC,MAAc;IAC5C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,6BAA6B;IAC7B,MAAM,WAAW,GAAG,qDAAqD,CAAC;IAC1E,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,0BAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,UAAU,CAAC,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,0BAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,YAAY,GAAG,uCAAuC,CAAC;IAC7D,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,0BAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,UAAU,CAAC,IAAI,CAAC,uBAAuB,GAAG,qBAAqB,0BAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ResolvedSchema } from "./schema";
|
|
2
|
+
export { validateSchema, resolveSchema } from "./schema";
|
|
3
|
+
export type { ResolvedSchema } from "./schema";
|
|
4
|
+
export interface ValidationResult {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
errors: string[];
|
|
7
|
+
warnings: string[];
|
|
8
|
+
schema: ResolvedSchema | null;
|
|
9
|
+
}
|
|
10
|
+
export interface ValidateOptions {
|
|
11
|
+
/** Path to the source file (used for resolving schema.json alongside it) */
|
|
12
|
+
filePath?: string;
|
|
13
|
+
/** Explicit path to a schema.json file */
|
|
14
|
+
schemaPath?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Validate mini app source code against all rules.
|
|
18
|
+
* Returns a result object (never throws).
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateSource(source: string, options?: ValidateOptions): ValidationResult;
|
|
21
|
+
/**
|
|
22
|
+
* Validate a bundled IIFE output.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateBundle(bundle: string): {
|
|
25
|
+
valid: boolean;
|
|
26
|
+
error?: string;
|
|
27
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Source Validation — runs all checks on mini app source code
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveSchema = exports.validateSchema = void 0;
|
|
7
|
+
exports.validateSource = validateSource;
|
|
8
|
+
exports.validateBundle = validateBundle;
|
|
9
|
+
const patterns_1 = require("./patterns");
|
|
10
|
+
const imports_1 = require("./imports");
|
|
11
|
+
const schema_1 = require("./schema");
|
|
12
|
+
var schema_2 = require("./schema");
|
|
13
|
+
Object.defineProperty(exports, "validateSchema", { enumerable: true, get: function () { return schema_2.validateSchema; } });
|
|
14
|
+
Object.defineProperty(exports, "resolveSchema", { enumerable: true, get: function () { return schema_2.resolveSchema; } });
|
|
15
|
+
/**
|
|
16
|
+
* Validate mini app source code against all rules.
|
|
17
|
+
* Returns a result object (never throws).
|
|
18
|
+
*/
|
|
19
|
+
function validateSource(source, options) {
|
|
20
|
+
const errors = [];
|
|
21
|
+
const warnings = [];
|
|
22
|
+
// 1. Size check
|
|
23
|
+
const sizeBytes = Buffer.byteLength(source, "utf-8");
|
|
24
|
+
if (sizeBytes > patterns_1.MAX_SOURCE_SIZE_BYTES) {
|
|
25
|
+
errors.push(`Source is ${sizeBytes} bytes, exceeds ${patterns_1.MAX_SOURCE_SIZE_BYTES} byte (50KB) limit`);
|
|
26
|
+
}
|
|
27
|
+
// 2. Default export check
|
|
28
|
+
if (!/export\s+default\s+/.test(source)) {
|
|
29
|
+
errors.push("Source must have a default export (export default function ...)");
|
|
30
|
+
}
|
|
31
|
+
// 3. Blocked patterns
|
|
32
|
+
for (const { pattern, label, help } of patterns_1.BLOCKED_PATTERNS) {
|
|
33
|
+
if (pattern.test(source)) {
|
|
34
|
+
errors.push(`Blocked pattern: ${label} — ${help}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// 4. Import validation (more detailed than blocked patterns)
|
|
38
|
+
const importViolations = (0, imports_1.validateImports)(source);
|
|
39
|
+
for (const v of importViolations) {
|
|
40
|
+
if (!errors.some((e) => e.includes("forbidden import") || e.includes("forbidden require"))) {
|
|
41
|
+
errors.push(v);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 5. Schema validation — resolve from schema.json file
|
|
45
|
+
let schema = null;
|
|
46
|
+
try {
|
|
47
|
+
schema = (0, schema_1.resolveSchema)(options?.filePath || "source.tsx", options?.schemaPath);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
errors.push(e.message);
|
|
51
|
+
}
|
|
52
|
+
// 6. Warnings (non-blocking)
|
|
53
|
+
if (!schema) {
|
|
54
|
+
warnings.push("No schema.json found — app will have no database. Create a schema.json file next to your source.");
|
|
55
|
+
}
|
|
56
|
+
if (sizeBytes > 40000) {
|
|
57
|
+
warnings.push(`Source is ${sizeBytes} bytes — approaching 50KB limit`);
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
valid: errors.length === 0,
|
|
61
|
+
errors,
|
|
62
|
+
warnings,
|
|
63
|
+
schema,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validate a bundled IIFE output.
|
|
68
|
+
*/
|
|
69
|
+
function validateBundle(bundle) {
|
|
70
|
+
const sizeBytes = Buffer.byteLength(bundle, "utf-8");
|
|
71
|
+
if (sizeBytes > patterns_1.MAX_BUNDLE_SIZE_BYTES) {
|
|
72
|
+
return {
|
|
73
|
+
valid: false,
|
|
74
|
+
error: `Bundle is ${sizeBytes} bytes, exceeds ${patterns_1.MAX_BUNDLE_SIZE_BYTES} byte limit`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return { valid: true };
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,8DAA8D;AAC9D,gFAAgF;;;AAgChF,wCAwDC;AAKD,wCASC;AApGD,yCAIoB;AACpB,uCAA4C;AAC5C,qCAAyC;AAGzC,mCAAyD;AAAhD,wGAAA,cAAc,OAAA;AAAE,uGAAA,aAAa,OAAA;AAiBtC;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAAc,EAAE,OAAyB;IACtE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,gBAAgB;IAChB,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,SAAS,GAAG,gCAAqB,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,aAAa,SAAS,mBAAmB,gCAAqB,oBAAoB,CAAC,CAAC;IAClG,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IACjF,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,2BAAgB,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,MAAM,gBAAgB,GAAG,IAAA,yBAAe,EAAC,MAAM,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;YAC3F,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,IAAI,MAAM,GAA0B,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,sBAAa,EACpB,OAAO,EAAE,QAAQ,IAAI,YAAY,EACjC,OAAO,EAAE,UAAU,CACpB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC,kGAAkG,CAAC,CAAC;IACpH,CAAC;IAED,IAAI,SAAS,GAAG,KAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,aAAa,SAAS,iCAAiC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,SAAS,GAAG,gCAAqB,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,aAAa,SAAS,mBAAmB,gCAAqB,aAAa;SACnF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Validation Rules — ported from plotpaper-aws validation.ts
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BLOCKED_PATTERNS = exports.ALLOWED_MODULES = exports.MAX_BUNDLE_SIZE_BYTES = exports.MAX_SOURCE_SIZE_BYTES = void 0;
|
|
7
|
+
exports.MAX_SOURCE_SIZE_BYTES = 50000;
|
|
8
|
+
exports.MAX_BUNDLE_SIZE_BYTES = 150000;
|
|
9
|
+
exports.ALLOWED_MODULES = [
|
|
10
|
+
"react",
|
|
11
|
+
"react-native",
|
|
12
|
+
"@plotpaper/mini-app-sdk",
|
|
13
|
+
"@expo/vector-icons/Feather",
|
|
14
|
+
"react-native-svg",
|
|
15
|
+
"react-native-safe-area-context",
|
|
16
|
+
];
|
|
17
|
+
function buildAllowedModulesPattern() {
|
|
18
|
+
return exports.ALLOWED_MODULES.map((m) => m.replace(/[.*+?^${}()|[\]\\\/]/g, "\\$&")).join("|");
|
|
19
|
+
}
|
|
20
|
+
const allowedAlt = buildAllowedModulesPattern();
|
|
21
|
+
exports.BLOCKED_PATTERNS = [
|
|
22
|
+
{ pattern: new RegExp(`require\\s*\\(\\s*["'](?!(?:${allowedAlt})["'])`), label: "forbidden require()", help: "Only these modules can be imported: " + exports.ALLOWED_MODULES.join(", ") },
|
|
23
|
+
{ pattern: new RegExp(`import\\s+.*from\\s+["'](?!(?:${allowedAlt})["'])`), label: "forbidden import", help: "Only these modules can be imported: " + exports.ALLOWED_MODULES.join(", ") },
|
|
24
|
+
{ pattern: /\bfetch\s*\(/, label: "fetch()", help: "Network requests are not allowed. Use sdk.ai for AI-generated content." },
|
|
25
|
+
{ pattern: /XMLHttpRequest/, label: "XMLHttpRequest", help: "Network requests are not allowed. Use sdk.ai for AI-generated content." },
|
|
26
|
+
{ pattern: /\beval\s*\(/, label: "eval()", help: "eval() is not allowed for security reasons." },
|
|
27
|
+
{ pattern: /Function\s*\(/, label: "Function constructor", help: "Function constructor is not allowed for security reasons." },
|
|
28
|
+
{ pattern: /AsyncStorage/, label: "AsyncStorage", help: "Use sdk.db for data persistence instead of AsyncStorage." },
|
|
29
|
+
{ pattern: /\bLinking\b/, label: "Linking", help: "Linking module is not allowed. Use sdk methods for navigation." },
|
|
30
|
+
{ pattern: /NativeModules/, label: "NativeModules", help: "Direct native module access is not allowed." },
|
|
31
|
+
{ pattern: /\bconstructor\s*\.\s*constructor/, label: "constructor chain", help: "Constructor chain access is blocked for security." },
|
|
32
|
+
{ pattern: /\.__proto__/, label: "__proto__ access", help: "Prototype access is blocked for security." },
|
|
33
|
+
{ pattern: /Object\s*\.\s*getPrototypeOf/, label: "prototype access", help: "Prototype access is blocked for security." },
|
|
34
|
+
{ pattern: /\bReflect\s*\.\s*(?:defineProperty|setPrototypeOf|set)\b/, label: "Reflect mutation", help: "Reflect mutations are blocked for security." },
|
|
35
|
+
{ pattern: /\bprocess\s*\./, label: "process access", help: "process access is not allowed." },
|
|
36
|
+
{ pattern: /\bglobalThis\b(?!\s*\.\s*__pp)/, label: "globalThis access", help: "Direct globalThis access is not allowed." },
|
|
37
|
+
];
|
|
38
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/validation/patterns.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,6DAA6D;AAC7D,gFAAgF;;;AAEnE,QAAA,qBAAqB,GAAG,KAAM,CAAC;AAC/B,QAAA,qBAAqB,GAAG,MAAO,CAAC;AAEhC,QAAA,eAAe,GAAG;IAC7B,OAAO;IACP,cAAc;IACd,yBAAyB;IACzB,4BAA4B;IAC5B,kBAAkB;IAClB,gCAAgC;CACjC,CAAC;AAEF,SAAS,0BAA0B;IACjC,OAAO,uBAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAC3C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,GAAG,0BAA0B,EAAE,CAAC;AAEnC,QAAA,gBAAgB,GAA4D;IACvF,EAAE,OAAO,EAAE,IAAI,MAAM,CAAC,+BAA+B,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,sCAAsC,GAAG,uBAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IACnL,EAAE,OAAO,EAAE,IAAI,MAAM,CAAC,iCAAiC,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,sCAAsC,GAAG,uBAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAClL,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,wEAAwE,EAAE;IAC7H,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,wEAAwE,EAAE;IACtI,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,6CAA6C,EAAE;IAChG,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,2DAA2D,EAAE;IAC9H,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,0DAA0D,EAAE;IACpH,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gEAAgE,EAAE;IACpH,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,6CAA6C,EAAE;IACzG,EAAE,OAAO,EAAE,kCAAkC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,mDAAmD,EAAE;IACtI,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,2CAA2C,EAAE;IACxG,EAAE,OAAO,EAAE,8BAA8B,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,2CAA2C,EAAE;IACzH,EAAE,OAAO,EAAE,0DAA0D,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,6CAA6C,EAAE;IACvJ,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gCAAgC,EAAE;IAC9F,EAAE,OAAO,EAAE,gCAAgC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,0CAA0C,EAAE;CAC5H,CAAC"}
|