pop-pay 0.1.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/LICENSE +21 -0
- package/README.md +35 -0
- package/dist/cli-vault.d.ts +7 -0
- package/dist/cli-vault.d.ts.map +1 -0
- package/dist/cli-vault.js +233 -0
- package/dist/cli-vault.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +159 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +68 -0
- package/dist/client.js.map +1 -0
- package/dist/core/models.d.ts +51 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +19 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/state.d.ts +15 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +84 -0
- package/dist/core/state.js.map +1 -0
- package/dist/engine/guardrails.d.ts +6 -0
- package/dist/engine/guardrails.d.ts.map +1 -0
- package/dist/engine/guardrails.js +128 -0
- package/dist/engine/guardrails.js.map +1 -0
- package/dist/engine/injector.d.ts +87 -0
- package/dist/engine/injector.d.ts.map +1 -0
- package/dist/engine/injector.js +955 -0
- package/dist/engine/injector.js.map +1 -0
- package/dist/engine/known-processors.d.ts +11 -0
- package/dist/engine/known-processors.d.ts.map +1 -0
- package/dist/engine/known-processors.js +47 -0
- package/dist/engine/known-processors.js.map +1 -0
- package/dist/engine/llm-guardrails.d.ts +20 -0
- package/dist/engine/llm-guardrails.d.ts.map +1 -0
- package/dist/engine/llm-guardrails.js +89 -0
- package/dist/engine/llm-guardrails.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +7 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +334 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/providers/base.d.ts +5 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +3 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/byoc-local.d.ts +12 -0
- package/dist/providers/byoc-local.d.ts.map +1 -0
- package/dist/providers/byoc-local.js +56 -0
- package/dist/providers/byoc-local.js.map +1 -0
- package/dist/providers/stripe-mock.d.ts +6 -0
- package/dist/providers/stripe-mock.d.ts.map +1 -0
- package/dist/providers/stripe-mock.js +34 -0
- package/dist/providers/stripe-mock.js.map +1 -0
- package/dist/providers/stripe-real.d.ts +9 -0
- package/dist/providers/stripe-real.d.ts.map +1 -0
- package/dist/providers/stripe-real.js +84 -0
- package/dist/providers/stripe-real.js.map +1 -0
- package/dist/vault.d.ts +23 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +283 -0
- package/dist/vault.js.map +1 -0
- package/package.json +71 -0
package/dist/vault.js
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* pop-pay credential vault — AES-256-GCM encrypted credential storage.
|
|
4
|
+
*
|
|
5
|
+
* Security model:
|
|
6
|
+
* - Credentials are encrypted at rest using AES-256-GCM with a machine-derived key.
|
|
7
|
+
* - The key is derived from a stable machine identifier using scrypt.
|
|
8
|
+
* - Plaintext credentials never touch disk after init-vault completes.
|
|
9
|
+
* - OSS version uses a public salt (documented limitation).
|
|
10
|
+
* - Option B passphrase mode: key derived from user passphrase via PBKDF2-HMAC-SHA256
|
|
11
|
+
* (600k iterations); stored in OS keyring for the session.
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.OSS_WARNING = void 0;
|
|
48
|
+
exports.deriveKeyFromPassphrase = deriveKeyFromPassphrase;
|
|
49
|
+
exports.storeKeyInKeyring = storeKeyInKeyring;
|
|
50
|
+
exports.loadKeyFromKeyring = loadKeyFromKeyring;
|
|
51
|
+
exports.clearKeyring = clearKeyring;
|
|
52
|
+
exports.encryptCredentials = encryptCredentials;
|
|
53
|
+
exports.decryptCredentials = decryptCredentials;
|
|
54
|
+
exports.vaultExists = vaultExists;
|
|
55
|
+
exports.loadVault = loadVault;
|
|
56
|
+
exports.saveVault = saveVault;
|
|
57
|
+
exports.secureWipeEnv = secureWipeEnv;
|
|
58
|
+
const node_crypto_1 = require("node:crypto");
|
|
59
|
+
const crypto = __importStar(require("node:crypto"));
|
|
60
|
+
const node_fs_1 = require("node:fs");
|
|
61
|
+
const node_os_1 = require("node:os");
|
|
62
|
+
const node_path_1 = require("node:path");
|
|
63
|
+
const node_child_process_1 = require("node:child_process");
|
|
64
|
+
const VAULT_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".config", "pop-pay");
|
|
65
|
+
const VAULT_PATH = (0, node_path_1.join)(VAULT_DIR, "vault.enc");
|
|
66
|
+
const KEYRING_SERVICE = "pop-pay-vault";
|
|
67
|
+
const KEYRING_USERNAME = "derived-key-hex";
|
|
68
|
+
// OSS public salt — intentionally documented as a security limitation.
|
|
69
|
+
const OSS_SALT = Buffer.from("pop-pay-oss-v1-public-salt-2026");
|
|
70
|
+
exports.OSS_WARNING = "\n\u26a0\ufe0f pop-pay SECURITY NOTICE: Running from source build (OSS mode).\n" +
|
|
71
|
+
" Vault encryption uses a public salt. An agent with shell execution\n" +
|
|
72
|
+
" tools could derive the vault key from public information.\n" +
|
|
73
|
+
" For stronger security: install via npm (`npm install pop-pay`)\n" +
|
|
74
|
+
" or use `pop-pay init-vault --passphrase` (coming soon).\n";
|
|
75
|
+
function getMachineId() {
|
|
76
|
+
// Linux: /etc/machine-id
|
|
77
|
+
try {
|
|
78
|
+
const mid = (0, node_fs_1.readFileSync)("/etc/machine-id", "utf8").trim();
|
|
79
|
+
if (mid)
|
|
80
|
+
return Buffer.from(mid);
|
|
81
|
+
}
|
|
82
|
+
catch { }
|
|
83
|
+
// macOS: IOPlatformUUID
|
|
84
|
+
if ((0, node_os_1.platform)() === "darwin") {
|
|
85
|
+
try {
|
|
86
|
+
const result = (0, node_child_process_1.execSync)("ioreg -rd1 -c IOPlatformExpertDevice", {
|
|
87
|
+
timeout: 5000,
|
|
88
|
+
encoding: "utf8",
|
|
89
|
+
});
|
|
90
|
+
for (const line of result.split("\n")) {
|
|
91
|
+
if (line.includes("IOPlatformUUID")) {
|
|
92
|
+
const parts = line.split('"');
|
|
93
|
+
return Buffer.from(parts[parts.length - 2]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch { }
|
|
98
|
+
}
|
|
99
|
+
// Windows: MachineGuid from registry
|
|
100
|
+
if ((0, node_os_1.platform)() === "win32") {
|
|
101
|
+
try {
|
|
102
|
+
const result = (0, node_child_process_1.execSync)('reg query "HKLM\\SOFTWARE\\Microsoft\\Cryptography" /v MachineGuid', { timeout: 5000, encoding: "utf8" });
|
|
103
|
+
const match = result.match(/MachineGuid\s+REG_SZ\s+(.+)/);
|
|
104
|
+
if (match)
|
|
105
|
+
return Buffer.from(match[1].trim());
|
|
106
|
+
}
|
|
107
|
+
catch { }
|
|
108
|
+
}
|
|
109
|
+
// Fallback: generate and store random ID
|
|
110
|
+
const fallbackPath = (0, node_path_1.join)(VAULT_DIR, ".machine_id");
|
|
111
|
+
if ((0, node_fs_1.existsSync)(fallbackPath)) {
|
|
112
|
+
return (0, node_fs_1.readFileSync)(fallbackPath);
|
|
113
|
+
}
|
|
114
|
+
const fallbackId = (0, node_crypto_1.randomBytes)(32);
|
|
115
|
+
(0, node_fs_1.mkdirSync)(VAULT_DIR, { recursive: true });
|
|
116
|
+
(0, node_fs_1.writeFileSync)(fallbackPath, fallbackId, { mode: 0o600 });
|
|
117
|
+
return fallbackId;
|
|
118
|
+
}
|
|
119
|
+
function getUsername() {
|
|
120
|
+
try {
|
|
121
|
+
return Buffer.from((0, node_os_1.userInfo)().username);
|
|
122
|
+
}
|
|
123
|
+
catch { }
|
|
124
|
+
return Buffer.from(process.env.USER ?? process.env.USERNAME ?? "unknown");
|
|
125
|
+
}
|
|
126
|
+
function deriveKey(salt, keyOverride) {
|
|
127
|
+
if (keyOverride)
|
|
128
|
+
return keyOverride;
|
|
129
|
+
const machineId = getMachineId();
|
|
130
|
+
const username = getUsername();
|
|
131
|
+
// Try Rust napi-rs hardened path first
|
|
132
|
+
if (!salt) {
|
|
133
|
+
try {
|
|
134
|
+
const native = require("../native/pop-pay-native.node");
|
|
135
|
+
const key = native.deriveKey(machineId, username);
|
|
136
|
+
if (key)
|
|
137
|
+
return Buffer.from(key);
|
|
138
|
+
}
|
|
139
|
+
catch { }
|
|
140
|
+
salt = OSS_SALT;
|
|
141
|
+
}
|
|
142
|
+
const password = Buffer.concat([machineId, Buffer.from(":"), username]);
|
|
143
|
+
// scrypt: n=2^14, r=8, p=1, dklen=32 (matches Python)
|
|
144
|
+
return (0, node_crypto_1.scryptSync)(password, salt, 32, { N: 2 ** 14, r: 8, p: 1 });
|
|
145
|
+
}
|
|
146
|
+
function deriveKeyFromPassphrase(passphrase) {
|
|
147
|
+
const machineId = getMachineId();
|
|
148
|
+
return (0, node_crypto_1.pbkdf2Sync)(passphrase, machineId, 600_000, 32, "sha256");
|
|
149
|
+
}
|
|
150
|
+
// Keyring helpers (optional keytar dependency)
|
|
151
|
+
function storeKeyInKeyring(key) {
|
|
152
|
+
try {
|
|
153
|
+
const keytar = require("keytar");
|
|
154
|
+
keytar.setPassword(KEYRING_SERVICE, KEYRING_USERNAME, key.toString("hex"));
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
throw new Error("keytar package required for passphrase mode. Install with: npm install keytar");
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async function loadKeyFromKeyring() {
|
|
161
|
+
try {
|
|
162
|
+
const keytar = require("keytar");
|
|
163
|
+
const hexKey = await keytar.getPassword(KEYRING_SERVICE, KEYRING_USERNAME);
|
|
164
|
+
if (hexKey)
|
|
165
|
+
return Buffer.from(hexKey, "hex");
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
async function clearKeyring() {
|
|
171
|
+
try {
|
|
172
|
+
const keytar = require("keytar");
|
|
173
|
+
await keytar.deletePassword(KEYRING_SERVICE, KEYRING_USERNAME);
|
|
174
|
+
}
|
|
175
|
+
catch { }
|
|
176
|
+
}
|
|
177
|
+
function encryptCredentials(creds, salt, keyOverride) {
|
|
178
|
+
const key = deriveKey(salt, keyOverride);
|
|
179
|
+
const nonce = (0, node_crypto_1.randomBytes)(12); // 96-bit random nonce
|
|
180
|
+
const cipher = crypto.createCipheriv("aes-256-gcm", key, nonce);
|
|
181
|
+
const plaintext = Buffer.from(JSON.stringify(creds));
|
|
182
|
+
const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
183
|
+
const tag = cipher.getAuthTag(); // 16 bytes
|
|
184
|
+
// Format: nonce (12) + ciphertext + tag (16) — matches Python cryptography lib output
|
|
185
|
+
return Buffer.concat([nonce, encrypted, tag]);
|
|
186
|
+
}
|
|
187
|
+
function decryptCredentials(blob, salt, keyOverride) {
|
|
188
|
+
if (blob.length < 28) {
|
|
189
|
+
// 12 nonce + at least 16 GCM tag
|
|
190
|
+
throw new Error("vault.enc is corrupted or too small");
|
|
191
|
+
}
|
|
192
|
+
const key = deriveKey(salt, keyOverride);
|
|
193
|
+
const nonce = blob.subarray(0, 12);
|
|
194
|
+
const tag = blob.subarray(blob.length - 16);
|
|
195
|
+
const ciphertext = blob.subarray(12, blob.length - 16);
|
|
196
|
+
const decipher = crypto.createDecipheriv("aes-256-gcm", key, nonce);
|
|
197
|
+
decipher.setAuthTag(tag);
|
|
198
|
+
try {
|
|
199
|
+
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
200
|
+
return JSON.parse(plaintext.toString("utf8"));
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
throw new Error("Failed to decrypt vault \u2014 wrong key (machine changed?) or corrupted vault.\n" +
|
|
204
|
+
"Re-run: pop-init-vault");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function vaultExists() {
|
|
208
|
+
return (0, node_fs_1.existsSync)(VAULT_PATH);
|
|
209
|
+
}
|
|
210
|
+
function writeVaultMode() {
|
|
211
|
+
let mode = "oss";
|
|
212
|
+
try {
|
|
213
|
+
const native = require("../native/pop-pay-native.node");
|
|
214
|
+
mode = native.isHardened() ? "hardened" : "oss";
|
|
215
|
+
}
|
|
216
|
+
catch { }
|
|
217
|
+
const markerPath = (0, node_path_1.join)(VAULT_DIR, ".vault_mode");
|
|
218
|
+
(0, node_fs_1.writeFileSync)(markerPath, mode, { mode: 0o600 });
|
|
219
|
+
}
|
|
220
|
+
function readVaultMode() {
|
|
221
|
+
const markerPath = (0, node_path_1.join)(VAULT_DIR, ".vault_mode");
|
|
222
|
+
try {
|
|
223
|
+
return (0, node_fs_1.readFileSync)(markerPath, "utf8").trim();
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return "unknown";
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async function loadVault() {
|
|
230
|
+
// Downgrade check
|
|
231
|
+
const vaultMode = readVaultMode();
|
|
232
|
+
if (vaultMode === "hardened") {
|
|
233
|
+
try {
|
|
234
|
+
const native = require("../native/pop-pay-native.node");
|
|
235
|
+
if (!native.isHardened()) {
|
|
236
|
+
throw new Error("Vault was created with a hardened build, but the native extension is missing or not hardened.\n" +
|
|
237
|
+
"Reinstall via npm: npm install pop-pay");
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (e) {
|
|
241
|
+
if (e.code === "MODULE_NOT_FOUND") {
|
|
242
|
+
throw new Error("Vault requires hardened build but native module not found. Reinstall via npm: npm install pop-pay");
|
|
243
|
+
}
|
|
244
|
+
throw e;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const blob = (0, node_fs_1.readFileSync)(VAULT_PATH);
|
|
248
|
+
// Try passphrase-derived key from keyring first
|
|
249
|
+
const passphraseKey = await loadKeyFromKeyring();
|
|
250
|
+
if (passphraseKey) {
|
|
251
|
+
try {
|
|
252
|
+
return decryptCredentials(blob, undefined, passphraseKey);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
// Wrong key — fall through to machine-derived key
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return decryptCredentials(blob);
|
|
259
|
+
}
|
|
260
|
+
function saveVault(creds, keyOverride) {
|
|
261
|
+
(0, node_fs_1.mkdirSync)(VAULT_DIR, { recursive: true });
|
|
262
|
+
const blob = encryptCredentials(creds, undefined, keyOverride);
|
|
263
|
+
// Atomic write: tmp → rename
|
|
264
|
+
const tmpPath = VAULT_PATH + ".tmp";
|
|
265
|
+
(0, node_fs_1.writeFileSync)(tmpPath, blob, { mode: 0o600 });
|
|
266
|
+
const fs = require("node:fs");
|
|
267
|
+
fs.renameSync(tmpPath, VAULT_PATH);
|
|
268
|
+
fs.chmodSync(VAULT_PATH, 0o600);
|
|
269
|
+
fs.chmodSync(VAULT_DIR, 0o700);
|
|
270
|
+
// Verify the vault is readable
|
|
271
|
+
const verifyBlob = (0, node_fs_1.readFileSync)(VAULT_PATH);
|
|
272
|
+
decryptCredentials(verifyBlob, undefined, keyOverride);
|
|
273
|
+
// Write mode marker
|
|
274
|
+
writeVaultMode();
|
|
275
|
+
}
|
|
276
|
+
function secureWipeEnv(envPath) {
|
|
277
|
+
if (!(0, node_fs_1.existsSync)(envPath))
|
|
278
|
+
return;
|
|
279
|
+
const size = (0, node_fs_1.statSync)(envPath).size;
|
|
280
|
+
(0, node_fs_1.writeFileSync)(envPath, Buffer.alloc(size, 0));
|
|
281
|
+
(0, node_fs_1.unlinkSync)(envPath);
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pop-pay",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Point One Percent - Semantic Payment Guardrail for AI Agents. It only takes 0.1% of hallucination to drain 100% of your wallet.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"pop-launch": "dist/cli.js",
|
|
9
|
+
"pop-init-vault": "dist/cli-vault.js",
|
|
10
|
+
"pop-unlock": "dist/cli-vault.js"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"build:native": "cd native && npm run build",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:watch": "vitest",
|
|
17
|
+
"lint": "eslint src/",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"ai",
|
|
22
|
+
"agent",
|
|
23
|
+
"payment",
|
|
24
|
+
"guardrail",
|
|
25
|
+
"security",
|
|
26
|
+
"mcp",
|
|
27
|
+
"virtual-card",
|
|
28
|
+
"cdp",
|
|
29
|
+
"browser-automation",
|
|
30
|
+
"checkout"
|
|
31
|
+
],
|
|
32
|
+
"author": "Point One Percent Team",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/TPEmist/pop-pay.git"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/TPEmist/pop-pay#readme",
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/TPEmist/pop-pay/issues"
|
|
41
|
+
},
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=18.0.0"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
47
|
+
"better-sqlite3": "^11.0.0",
|
|
48
|
+
"dotenv": "^16.4.0",
|
|
49
|
+
"zod": "^3.23.0"
|
|
50
|
+
},
|
|
51
|
+
"optionalDependencies": {
|
|
52
|
+
"@anthropic-ai/sdk": "^0.30.0",
|
|
53
|
+
"openai": "^4.60.0",
|
|
54
|
+
"stripe": "^17.0.0",
|
|
55
|
+
"keytar": "^7.9.0",
|
|
56
|
+
"ws": "^8.17.0"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/better-sqlite3": "^7.6.0",
|
|
60
|
+
"@types/node": "^20.0.0",
|
|
61
|
+
"typescript": "^5.5.0",
|
|
62
|
+
"vitest": "^2.0.0",
|
|
63
|
+
"eslint": "^9.0.0"
|
|
64
|
+
},
|
|
65
|
+
"files": [
|
|
66
|
+
"dist/",
|
|
67
|
+
"native/pop-pay-native.*.node",
|
|
68
|
+
"README.md",
|
|
69
|
+
"LICENSE"
|
|
70
|
+
]
|
|
71
|
+
}
|