@snappy-stack/sdk 0.1.5 → 0.1.6
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/LICENSE +12 -12
- package/README.md +65 -65
- package/dist/bin/check.cjs +79 -0
- package/dist/bin/check.cjs.map +1 -0
- package/dist/bin/check.d.cts +1 -0
- package/dist/bin/check.d.ts +1 -0
- package/dist/bin/check.js +72 -0
- package/dist/bin/check.js.map +1 -0
- package/dist/chunk-TLDZ32ME.js +356 -0
- package/dist/chunk-TLDZ32ME.js.map +1 -0
- package/dist/chunk-X7RFIMX7.cjs +361 -0
- package/dist/chunk-X7RFIMX7.cjs.map +1 -0
- package/dist/client-FIWQgwNq.d.cts +325 -0
- package/dist/client-FIWQgwNq.d.ts +325 -0
- package/dist/index.cjs +85 -7
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5 -38
- package/dist/index.d.ts +5 -38
- package/dist/index.js +67 -7
- package/dist/index.js.map +1 -0
- package/dist/plugin.cjs +209 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +9 -0
- package/dist/plugin.d.ts +9 -0
- package/dist/plugin.js +198 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +26 -7
package/LICENSE
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
SNAPPY SDK — Proprietary License
|
|
2
|
-
Copyright (c) 2026 Wicky.ID — Kaiser Wicky
|
|
3
|
-
|
|
4
|
-
This software is proprietary and confidential.
|
|
5
|
-
Unauthorized copying, modification, distribution, or use
|
|
6
|
-
of this software, in source or binary form, is strictly
|
|
7
|
-
prohibited without prior written permission from Wicky.ID.
|
|
8
|
-
|
|
9
|
-
Use of this SDK requires a valid SNAPPY_TOKEN issued by Wicky.ID.
|
|
10
|
-
Unauthorized use will result in immediate token revocation.
|
|
11
|
-
|
|
12
|
-
Contact: hi@wicky.id · wicky.id/snappy
|
|
1
|
+
SNAPPY SDK — Proprietary License
|
|
2
|
+
Copyright (c) 2026 Wicky.ID — Kaiser Wicky
|
|
3
|
+
|
|
4
|
+
This software is proprietary and confidential.
|
|
5
|
+
Unauthorized copying, modification, distribution, or use
|
|
6
|
+
of this software, in source or binary form, is strictly
|
|
7
|
+
prohibited without prior written permission from Wicky.ID.
|
|
8
|
+
|
|
9
|
+
Use of this SDK requires a valid SNAPPY_TOKEN issued by Wicky.ID.
|
|
10
|
+
Unauthorized use will result in immediate token revocation.
|
|
11
|
+
|
|
12
|
+
Contact: hi@wicky.id · wicky.id/snappy
|
package/README.md
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
# @snappy-stack/sdk 🛡️🚀
|
|
2
|
-
|
|
3
|
-
A high-performance, secure, and opinionated SDK for the Snappy Stack ecosystem.
|
|
4
|
-
|
|
5
|
-
## ⚖️ License & Proprietary Notice
|
|
6
|
-
|
|
7
|
-
**Copyright (c) 2026 Bagas Fajar Wicaksono (WickyID) / Snappy-Stack. All rights reserved.**
|
|
8
|
-
|
|
9
|
-
This software is **proprietary**. Unauthorized copying, modification, distribution, or build-output tampering is strictly prohibited. By using this SDK, you agree to the terms outlined in the [LICENSE](./LICENSE) file.
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## 🏗️ Installation
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npm install @snappy-stack/sdk
|
|
17
|
-
# or
|
|
18
|
-
pnpm add @snappy-stack/sdk
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## 🚀 Usage
|
|
22
|
-
|
|
23
|
-
### Snappy Client
|
|
24
|
-
```typescript
|
|
25
|
-
import { createClient } from '@snappy-stack/sdk';
|
|
26
|
-
|
|
27
|
-
const client = createClient({
|
|
28
|
-
publicKey: 'YOUR_PUBLIC_KEY',
|
|
29
|
-
});
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Components (React)
|
|
33
|
-
```tsx
|
|
34
|
-
import { SnappyCredit } from '@snappy-stack/sdk/components';
|
|
35
|
-
|
|
36
|
-
export default function App() {
|
|
37
|
-
return (
|
|
38
|
-
<div>
|
|
39
|
-
<SnappyCredit />
|
|
40
|
-
</div>
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## 🛡️ Build-time Enforcement
|
|
46
|
-
|
|
47
|
-
This SDK includes a mandatory credit enforcer Vite/Rollup plugin. To ensure compliance and optimal quality scoring, add the plugin to your build configuration:
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
import { snappyCreditEnforcer } from '@snappy-stack/sdk/plugins';
|
|
51
|
-
|
|
52
|
-
export default {
|
|
53
|
-
plugins: [
|
|
54
|
-
snappyCreditEnforcer()
|
|
55
|
-
]
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## 📊 Quality Scoring (SEO/Audit)
|
|
60
|
-
|
|
61
|
-
The SDK automatically evaluates your application against the Snappy Quality Standard, providing real-time feedback on performance, SEO, and integration health.
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
Built with ⚡ by [Snappy-Stack](https://github.com/Snappy-Stack).
|
|
1
|
+
# @snappy-stack/sdk 🛡️🚀
|
|
2
|
+
|
|
3
|
+
A high-performance, secure, and opinionated SDK for the Snappy Stack ecosystem.
|
|
4
|
+
|
|
5
|
+
## ⚖️ License & Proprietary Notice
|
|
6
|
+
|
|
7
|
+
**Copyright (c) 2026 Bagas Fajar Wicaksono (WickyID) / Snappy-Stack. All rights reserved.**
|
|
8
|
+
|
|
9
|
+
This software is **proprietary**. Unauthorized copying, modification, distribution, or build-output tampering is strictly prohibited. By using this SDK, you agree to the terms outlined in the [LICENSE](./LICENSE) file.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 🏗️ Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @snappy-stack/sdk
|
|
17
|
+
# or
|
|
18
|
+
pnpm add @snappy-stack/sdk
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 🚀 Usage
|
|
22
|
+
|
|
23
|
+
### Snappy Client
|
|
24
|
+
```typescript
|
|
25
|
+
import { createClient } from '@snappy-stack/sdk';
|
|
26
|
+
|
|
27
|
+
const client = createClient({
|
|
28
|
+
publicKey: 'YOUR_PUBLIC_KEY',
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Components (React)
|
|
33
|
+
```tsx
|
|
34
|
+
import { SnappyCredit } from '@snappy-stack/sdk/components';
|
|
35
|
+
|
|
36
|
+
export default function App() {
|
|
37
|
+
return (
|
|
38
|
+
<div>
|
|
39
|
+
<SnappyCredit />
|
|
40
|
+
</div>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 🛡️ Build-time Enforcement
|
|
46
|
+
|
|
47
|
+
This SDK includes a mandatory credit enforcer Vite/Rollup plugin. To ensure compliance and optimal quality scoring, add the plugin to your build configuration:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { snappyCreditEnforcer } from '@snappy-stack/sdk/plugins';
|
|
51
|
+
|
|
52
|
+
export default {
|
|
53
|
+
plugins: [
|
|
54
|
+
snappyCreditEnforcer()
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 📊 Quality Scoring (SEO/Audit)
|
|
60
|
+
|
|
61
|
+
The SDK automatically evaluates your application against the Snappy Quality Standard, providing real-time feedback on performance, SEO, and integration health.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
Built with ⚡ by [Snappy-Stack](https://github.com/Snappy-Stack).
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkX7RFIMX7_cjs = require('../chunk-X7RFIMX7.cjs');
|
|
5
|
+
var fs = require('fs');
|
|
6
|
+
var path = require('path');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
11
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
12
|
+
|
|
13
|
+
async function run() {
|
|
14
|
+
console.log("\n\u{1F50D} Running SNAPPY Pre-build Checks...");
|
|
15
|
+
const token = process.env.SNAPPY_TOKEN;
|
|
16
|
+
if (!token) {
|
|
17
|
+
console.error("\u274C SNAPPY_TOKEN missing in environment");
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
console.log("\u2705 Token present");
|
|
21
|
+
const client = chunkX7RFIMX7_cjs.createClient({ token });
|
|
22
|
+
let hasCredit = false;
|
|
23
|
+
const findCredit = (dir) => {
|
|
24
|
+
if (!fs__default.default.existsSync(dir)) return;
|
|
25
|
+
const files = fs__default.default.readdirSync(dir);
|
|
26
|
+
for (const file of files) {
|
|
27
|
+
const fullPath = path__default.default.join(dir, file);
|
|
28
|
+
if (fs__default.default.statSync(fullPath).isDirectory()) {
|
|
29
|
+
if (file !== "node_modules" && file !== ".astro" && file !== "dist" && !file.startsWith(".")) {
|
|
30
|
+
findCredit(fullPath);
|
|
31
|
+
}
|
|
32
|
+
} else if (file.endsWith(".astro")) {
|
|
33
|
+
const content = fs__default.default.readFileSync(fullPath, "utf8");
|
|
34
|
+
if (content.match(/<SnappyCredit\b/)) {
|
|
35
|
+
hasCredit = true;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (hasCredit) return;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
const srcDir = path__default.default.join(process.cwd(), "src");
|
|
44
|
+
findCredit(srcDir);
|
|
45
|
+
if (!hasCredit) {
|
|
46
|
+
console.error("\u274C SnappyCredit missing in src/**/*.astro");
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
console.log("\u2705 SnappyCredit found");
|
|
50
|
+
} catch (e) {
|
|
51
|
+
console.error(`\u26A0\uFE0F Could not verify SnappyCredit: ${e.message}`);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
await client.global("site-settings").get();
|
|
55
|
+
console.log("\u2705 site-settings global exists");
|
|
56
|
+
await client.global("hero").get();
|
|
57
|
+
console.log("\u2705 hero global exists");
|
|
58
|
+
} catch (e) {
|
|
59
|
+
console.error(`\u274C Global check failed: ${e.message}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const { score } = await client.getScore();
|
|
64
|
+
if (score < 50) {
|
|
65
|
+
console.error(`\u274C Score: ${score}/100 \u2014 below minimum threshold (50)`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
console.log(`\u2705 Score: ${score}/100`);
|
|
69
|
+
} catch (e) {
|
|
70
|
+
console.warn(`\u26A0\uFE0F Score check skipped or failed: ${e.message}`);
|
|
71
|
+
}
|
|
72
|
+
console.log("\u{1F680} Ready to deploy!\n");
|
|
73
|
+
}
|
|
74
|
+
run().catch((err) => {
|
|
75
|
+
console.error("\u274C Unexpected error during snappy-check:", err.message);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=check.cjs.map
|
|
79
|
+
//# sourceMappingURL=check.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/bin/check.ts"],"names":["createClient","fs","path"],"mappings":"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","file":"check.cjs","sourcesContent":["#!/usr/bin/env node\nimport { createClient } from '../client.js';\nimport fs from 'fs';\nimport path from 'path';\n\nasync function run() {\n console.log('\\n🔍 Running SNAPPY Pre-build Checks...');\n\n // 1. Token Check\n const token = process.env.SNAPPY_TOKEN;\n if (!token) {\n console.error('❌ SNAPPY_TOKEN missing in environment');\n process.exit(1);\n }\n console.log('✅ Token present');\n\n const client = createClient({ token });\n\n // 2. SnappyCredit Check\n let hasCredit = false;\n const findCredit = (dir: string) => {\n if (!fs.existsSync(dir)) return;\n const files = fs.readdirSync(dir);\n for (const file of files) {\n const fullPath = path.join(dir, file);\n if (fs.statSync(fullPath).isDirectory()) {\n if (file !== 'node_modules' && file !== '.astro' && file !== 'dist' && !file.startsWith('.')) {\n findCredit(fullPath);\n }\n } else if (file.endsWith('.astro')) {\n const content = fs.readFileSync(fullPath, 'utf8');\n // Simple regex to find <SnappyCredit or {SnappyCredit} or similar\n // We look for the component name as a word\n if (content.match(/<SnappyCredit\\b/)) {\n hasCredit = true;\n return;\n }\n }\n if (hasCredit) return;\n }\n };\n\n try {\n const srcDir = path.join(process.cwd(), 'src');\n findCredit(srcDir);\n if (!hasCredit) {\n console.error('❌ SnappyCredit missing in src/**/*.astro');\n process.exit(1);\n }\n console.log('✅ SnappyCredit found');\n } catch (e: any) {\n console.error(`⚠️ Could not verify SnappyCredit: ${e.message}`);\n }\n\n // 3 & 4. Globals Check\n try {\n await client.global('site-settings').get();\n console.log('✅ site-settings global exists');\n await client.global('hero').get();\n console.log('✅ hero global exists');\n } catch (e: any) {\n console.error(`❌ Global check failed: ${e.message}`);\n process.exit(1);\n }\n\n // 5. Score Check\n try {\n const { score } = await client.getScore();\n if (score < 50) {\n console.error(`❌ Score: ${score}/100 — below minimum threshold (50)`);\n process.exit(1);\n }\n console.log(`✅ Score: ${score}/100`);\n } catch (e: any) {\n console.warn(`⚠️ Score check skipped or failed: ${e.message}`);\n }\n\n console.log('🚀 Ready to deploy!\\n');\n}\n\nrun().catch(err => {\n console.error('❌ Unexpected error during snappy-check:', err.message);\n process.exit(1);\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createClient } from '../chunk-TLDZ32ME.js';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
|
|
6
|
+
async function run() {
|
|
7
|
+
console.log("\n\u{1F50D} Running SNAPPY Pre-build Checks...");
|
|
8
|
+
const token = process.env.SNAPPY_TOKEN;
|
|
9
|
+
if (!token) {
|
|
10
|
+
console.error("\u274C SNAPPY_TOKEN missing in environment");
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
console.log("\u2705 Token present");
|
|
14
|
+
const client = createClient({ token });
|
|
15
|
+
let hasCredit = false;
|
|
16
|
+
const findCredit = (dir) => {
|
|
17
|
+
if (!fs.existsSync(dir)) return;
|
|
18
|
+
const files = fs.readdirSync(dir);
|
|
19
|
+
for (const file of files) {
|
|
20
|
+
const fullPath = path.join(dir, file);
|
|
21
|
+
if (fs.statSync(fullPath).isDirectory()) {
|
|
22
|
+
if (file !== "node_modules" && file !== ".astro" && file !== "dist" && !file.startsWith(".")) {
|
|
23
|
+
findCredit(fullPath);
|
|
24
|
+
}
|
|
25
|
+
} else if (file.endsWith(".astro")) {
|
|
26
|
+
const content = fs.readFileSync(fullPath, "utf8");
|
|
27
|
+
if (content.match(/<SnappyCredit\b/)) {
|
|
28
|
+
hasCredit = true;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (hasCredit) return;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
try {
|
|
36
|
+
const srcDir = path.join(process.cwd(), "src");
|
|
37
|
+
findCredit(srcDir);
|
|
38
|
+
if (!hasCredit) {
|
|
39
|
+
console.error("\u274C SnappyCredit missing in src/**/*.astro");
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
console.log("\u2705 SnappyCredit found");
|
|
43
|
+
} catch (e) {
|
|
44
|
+
console.error(`\u26A0\uFE0F Could not verify SnappyCredit: ${e.message}`);
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
await client.global("site-settings").get();
|
|
48
|
+
console.log("\u2705 site-settings global exists");
|
|
49
|
+
await client.global("hero").get();
|
|
50
|
+
console.log("\u2705 hero global exists");
|
|
51
|
+
} catch (e) {
|
|
52
|
+
console.error(`\u274C Global check failed: ${e.message}`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const { score } = await client.getScore();
|
|
57
|
+
if (score < 50) {
|
|
58
|
+
console.error(`\u274C Score: ${score}/100 \u2014 below minimum threshold (50)`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
console.log(`\u2705 Score: ${score}/100`);
|
|
62
|
+
} catch (e) {
|
|
63
|
+
console.warn(`\u26A0\uFE0F Score check skipped or failed: ${e.message}`);
|
|
64
|
+
}
|
|
65
|
+
console.log("\u{1F680} Ready to deploy!\n");
|
|
66
|
+
}
|
|
67
|
+
run().catch((err) => {
|
|
68
|
+
console.error("\u274C Unexpected error during snappy-check:", err.message);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=check.js.map
|
|
72
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/bin/check.ts"],"names":[],"mappings":"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","file":"check.js","sourcesContent":["#!/usr/bin/env node\nimport { createClient } from '../client.js';\nimport fs from 'fs';\nimport path from 'path';\n\nasync function run() {\n console.log('\\n🔍 Running SNAPPY Pre-build Checks...');\n\n // 1. Token Check\n const token = process.env.SNAPPY_TOKEN;\n if (!token) {\n console.error('❌ SNAPPY_TOKEN missing in environment');\n process.exit(1);\n }\n console.log('✅ Token present');\n\n const client = createClient({ token });\n\n // 2. SnappyCredit Check\n let hasCredit = false;\n const findCredit = (dir: string) => {\n if (!fs.existsSync(dir)) return;\n const files = fs.readdirSync(dir);\n for (const file of files) {\n const fullPath = path.join(dir, file);\n if (fs.statSync(fullPath).isDirectory()) {\n if (file !== 'node_modules' && file !== '.astro' && file !== 'dist' && !file.startsWith('.')) {\n findCredit(fullPath);\n }\n } else if (file.endsWith('.astro')) {\n const content = fs.readFileSync(fullPath, 'utf8');\n // Simple regex to find <SnappyCredit or {SnappyCredit} or similar\n // We look for the component name as a word\n if (content.match(/<SnappyCredit\\b/)) {\n hasCredit = true;\n return;\n }\n }\n if (hasCredit) return;\n }\n };\n\n try {\n const srcDir = path.join(process.cwd(), 'src');\n findCredit(srcDir);\n if (!hasCredit) {\n console.error('❌ SnappyCredit missing in src/**/*.astro');\n process.exit(1);\n }\n console.log('✅ SnappyCredit found');\n } catch (e: any) {\n console.error(`⚠️ Could not verify SnappyCredit: ${e.message}`);\n }\n\n // 3 & 4. Globals Check\n try {\n await client.global('site-settings').get();\n console.log('✅ site-settings global exists');\n await client.global('hero').get();\n console.log('✅ hero global exists');\n } catch (e: any) {\n console.error(`❌ Global check failed: ${e.message}`);\n process.exit(1);\n }\n\n // 5. Score Check\n try {\n const { score } = await client.getScore();\n if (score < 50) {\n console.error(`❌ Score: ${score}/100 — below minimum threshold (50)`);\n process.exit(1);\n }\n console.log(`✅ Score: ${score}/100`);\n } catch (e: any) {\n console.warn(`⚠️ Score check skipped or failed: ${e.message}`);\n }\n\n console.log('🚀 Ready to deploy!\\n');\n}\n\nrun().catch(err => {\n console.error('❌ Unexpected error during snappy-check:', err.message);\n process.exit(1);\n});\n"]}
|