pinme 2.0.5-beta.1 → 2.0.5

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.
Files changed (2) hide show
  1. package/dist/index.js +504 -249
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -5978,7 +5978,7 @@ var import_chalk26 = __toESM(require("chalk"));
5978
5978
  var import_figlet5 = __toESM(require("figlet"));
5979
5979
 
5980
5980
  // package.json
5981
- var version = "2.0.5-beta.1";
5981
+ var version = "2.0.5";
5982
5982
 
5983
5983
  // bin/upload.ts
5984
5984
  var import_path7 = __toESM(require("path"));
@@ -6025,7 +6025,7 @@ function getUid() {
6025
6025
  // bin/utils/uploadToIpfsSplit.ts
6026
6026
  init_axios2();
6027
6027
  var import_fs_extra4 = __toESM(require("fs-extra"));
6028
- var import_path5 = __toESM(require("path"));
6028
+ var import_path6 = __toESM(require("path"));
6029
6029
  var import_form_data2 = __toESM(require("form-data"));
6030
6030
  var import_ora = __toESM(require("ora"));
6031
6031
  var crypto2 = __toESM(require("crypto"));
@@ -6077,13 +6077,326 @@ init_cliError();
6077
6077
 
6078
6078
  // bin/utils/history.ts
6079
6079
  var import_fs_extra3 = __toESM(require("fs-extra"));
6080
- var import_path4 = __toESM(require("path"));
6081
- var import_os3 = __toESM(require("os"));
6080
+ var import_path5 = __toESM(require("path"));
6081
+ var import_os4 = __toESM(require("os"));
6082
6082
  var import_dayjs = __toESM(require("dayjs"));
6083
6083
  var import_chalk5 = __toESM(require("chalk"));
6084
6084
  init_pinmeApi();
6085
- var HISTORY_DIR = import_path4.default.join(import_os3.default.homedir(), ".pinme");
6086
- var HISTORY_FILE = import_path4.default.join(HISTORY_DIR, "upload-history.json");
6085
+
6086
+ // bin/utils/tracker.ts
6087
+ var import_os3 = __toESM(require("os"));
6088
+ var import_fs2 = __toESM(require("fs"));
6089
+ var import_path4 = __toESM(require("path"));
6090
+ var import_child_process2 = require("child_process");
6091
+ var REQUEST_TIMEOUT_MS = 1500;
6092
+ var DEFAULT_GATEWAY = "https://pinme.dev";
6093
+ var DEFAULT_PRODUCT = "pinme-cli";
6094
+ var ACTION_OVERRIDES = {
6095
+ cli_login_success: "success",
6096
+ cli_login_failed: "fail",
6097
+ appkey_set_success: "success",
6098
+ appkey_set_failed: "fail",
6099
+ appkey_shown_success: "view",
6100
+ appkey_shown_failed: "fail",
6101
+ my_domains_success: "view",
6102
+ my_domains_failed: "fail",
6103
+ wallet_balance_success: "view",
6104
+ wallet_balance_failed: "fail",
6105
+ upload_history_viewed: "view",
6106
+ upload_history_cleared: "click",
6107
+ upload_history_failed: "fail"
6108
+ };
6109
+ var TRACK_CHILD_SCRIPT = `
6110
+ const rawUrl = process.argv[1];
6111
+ if (!rawUrl) process.exit(0);
6112
+ try {
6113
+ const transport = rawUrl.startsWith('https:') ? require('https') : require('http');
6114
+ const req = transport.get(rawUrl, {
6115
+ headers: {
6116
+ 'User-Agent': 'Pinme-CLI-Tracker'
6117
+ }
6118
+ }, (res) => {
6119
+ res.resume();
6120
+ res.on('end', () => process.exit(0));
6121
+ });
6122
+ req.setTimeout(${REQUEST_TIMEOUT_MS}, () => req.destroy());
6123
+ req.on('error', () => process.exit(0));
6124
+ req.on('close', () => process.exit(0));
6125
+ } catch (_) {
6126
+ process.exit(0);
6127
+ }
6128
+ `;
6129
+ function trimTrailingSlash2(value) {
6130
+ return value.replace(/\/+$/, "");
6131
+ }
6132
+ function shouldDisableTracking() {
6133
+ return process.env.PINME_TRACKING_DISABLED === "1" || process.env.DO_NOT_TRACK === "1";
6134
+ }
6135
+ function sanitizeTrackValue(value) {
6136
+ if (value === void 0 || value === null) {
6137
+ return void 0;
6138
+ }
6139
+ return String(value).trim().slice(0, 200);
6140
+ }
6141
+ function getTrackErrorReason(error) {
6142
+ var _a2, _b, _c, _d, _e;
6143
+ const candidate = ((_b = (_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.data) == null ? void 0 : _b.msg) || ((_d = (_c = error == null ? void 0 : error.response) == null ? void 0 : _c.data) == null ? void 0 : _d.message) || (error == null ? void 0 : error.message) || ((_e = error == null ? void 0 : error.toString) == null ? void 0 : _e.call(error)) || "unknown_error";
6144
+ return sanitizeTrackValue(candidate) || "unknown_error";
6145
+ }
6146
+ function resolveTrackAction(event, data = {}) {
6147
+ const explicitAction = data.a;
6148
+ if (typeof explicitAction === "string" && explicitAction.trim()) {
6149
+ return explicitAction.trim();
6150
+ }
6151
+ if (ACTION_OVERRIDES[event]) {
6152
+ return ACTION_OVERRIDES[event];
6153
+ }
6154
+ if (event.endsWith("_success")) {
6155
+ return "success";
6156
+ }
6157
+ if (event.endsWith("_failed") || event.endsWith("_fail")) {
6158
+ return "fail";
6159
+ }
6160
+ if (event.includes("click") || event.includes("copied")) {
6161
+ return "click";
6162
+ }
6163
+ if (event.includes("exposure")) {
6164
+ return "exposure";
6165
+ }
6166
+ if (event.includes("view")) {
6167
+ return "view";
6168
+ }
6169
+ if (event.endsWith("_started") || event.endsWith("_submit")) {
6170
+ return "submit";
6171
+ }
6172
+ return "view";
6173
+ }
6174
+ var cachedProjectContext = null;
6175
+ var cachedProjectContextCwd = null;
6176
+ function resolveProjectContext() {
6177
+ const cwd = process.cwd();
6178
+ if (cachedProjectContext && cachedProjectContextCwd === cwd) {
6179
+ return cachedProjectContext;
6180
+ }
6181
+ const context = {};
6182
+ const configPath = import_path4.default.join(cwd, "pinme.toml");
6183
+ if (import_fs2.default.existsSync(configPath)) {
6184
+ try {
6185
+ const configContent = import_fs2.default.readFileSync(configPath, "utf8");
6186
+ const projectNameMatch = configContent.match(
6187
+ /project_name\s*=\s*"([^"]+)"/
6188
+ );
6189
+ context.projectName = sanitizeTrackValue(projectNameMatch == null ? void 0 : projectNameMatch[1]) || sanitizeTrackValue(process.env.PINME_PROJECT_NAME);
6190
+ context.projectDir = sanitizeTrackValue(import_path4.default.basename(cwd));
6191
+ } catch (_) {
6192
+ context.projectName = sanitizeTrackValue(process.env.PINME_PROJECT_NAME);
6193
+ }
6194
+ } else {
6195
+ context.projectName = sanitizeTrackValue(process.env.PINME_PROJECT_NAME);
6196
+ }
6197
+ cachedProjectContext = context;
6198
+ cachedProjectContextCwd = cwd;
6199
+ return context;
6200
+ }
6201
+ function getPathKind(pathValue) {
6202
+ try {
6203
+ const stat = import_fs2.default.statSync(pathValue);
6204
+ if (stat.isDirectory()) {
6205
+ return "directory";
6206
+ }
6207
+ if (stat.isFile()) {
6208
+ return "file";
6209
+ }
6210
+ } catch (_) {
6211
+ return "unknown";
6212
+ }
6213
+ return "unknown";
6214
+ }
6215
+ var Tracker = class _Tracker {
6216
+ static instance;
6217
+ gateway;
6218
+ product;
6219
+ source;
6220
+ disabled;
6221
+ constructor(gateway, product) {
6222
+ this.gateway = trimTrailingSlash2(
6223
+ gateway || process.env.PINME_TRACKER_GATEWAY || DEFAULT_GATEWAY
6224
+ );
6225
+ this.product = product || DEFAULT_PRODUCT;
6226
+ this.source = sanitizeTrackValue(process.env.PINME_TRACK_SOURCE);
6227
+ this.disabled = shouldDisableTracking();
6228
+ }
6229
+ static getInstance(gateway, product) {
6230
+ if (!_Tracker.instance) {
6231
+ _Tracker.instance = new _Tracker(gateway, product);
6232
+ }
6233
+ return _Tracker.instance;
6234
+ }
6235
+ trackEvent(event, page, data = {}) {
6236
+ if (this.disabled || !this.gateway) {
6237
+ return Promise.resolve();
6238
+ }
6239
+ try {
6240
+ const payload = this.buildPayload(event, page, data);
6241
+ const params = new URLSearchParams(payload).toString();
6242
+ const url2 = `${this.gateway}/track.gif?${params}`;
6243
+ this.dispatch(url2);
6244
+ } catch (_) {
6245
+ }
6246
+ return Promise.resolve();
6247
+ }
6248
+ buildPayload(event, page, data) {
6249
+ const projectContext = resolveProjectContext();
6250
+ const action = resolveTrackAction(event, data);
6251
+ const payload = {
6252
+ ...data,
6253
+ u: getUid(),
6254
+ s: this.source,
6255
+ pd: this.product,
6256
+ p: page,
6257
+ a: action,
6258
+ ev: event,
6259
+ event,
6260
+ project_name: projectContext.projectName,
6261
+ project_dir: projectContext.projectDir,
6262
+ cli_version: version,
6263
+ node_version: process.version,
6264
+ os: import_os3.default.platform(),
6265
+ arch: import_os3.default.arch()
6266
+ };
6267
+ const filtered = {};
6268
+ for (const [key, value] of Object.entries(payload)) {
6269
+ const normalized = sanitizeTrackValue(value);
6270
+ if (normalized) {
6271
+ filtered[key] = normalized;
6272
+ }
6273
+ }
6274
+ return filtered;
6275
+ }
6276
+ dispatch(url2) {
6277
+ const child = (0, import_child_process2.spawn)(process.execPath, ["-e", TRACK_CHILD_SCRIPT, url2], {
6278
+ detached: true,
6279
+ stdio: "ignore",
6280
+ windowsHide: true
6281
+ });
6282
+ child.unref();
6283
+ }
6284
+ };
6285
+ var tracker = Tracker.getInstance();
6286
+ var tracker_default = tracker;
6287
+
6288
+ // bin/utils/trackerEvents.ts
6289
+ var TRACK_PAGES = {
6290
+ auth: "cli_auth",
6291
+ login: "cli_login",
6292
+ upload: "cli_upload",
6293
+ import: "cli_import",
6294
+ export: "cli_export",
6295
+ remove: "cli_remove",
6296
+ domain: "cli_domain",
6297
+ wallet: "cli_wallet",
6298
+ project: "cli_project",
6299
+ deploy: "cli_deploy"
6300
+ };
6301
+ var TRACK_EVENTS = {
6302
+ cliLoginSuccess: "cli_login_success",
6303
+ cliLoginFailed: "cli_login_failed",
6304
+ appKeySetSuccess: "appkey_set_success",
6305
+ appKeySetFailed: "appkey_set_failed",
6306
+ logoutSuccess: "logout_success",
6307
+ logoutFailed: "logout_failed",
6308
+ uploadSuccess: "upload_success",
6309
+ uploadFailed: "upload_failed",
6310
+ importSuccess: "import_success",
6311
+ importFailed: "import_failed",
6312
+ exportSuccess: "export_success",
6313
+ exportFailed: "export_failed",
6314
+ removeSuccess: "remove_success",
6315
+ removeFailed: "remove_failed",
6316
+ domainBindSuccess: "domain_bind_success",
6317
+ domainBindFailed: "domain_bind_failed",
6318
+ myDomainsSuccess: "my_domains_success",
6319
+ myDomainsFailed: "my_domains_failed",
6320
+ walletBalanceSuccess: "wallet_balance_success",
6321
+ walletBalanceFailed: "wallet_balance_failed",
6322
+ projectCreateSuccess: "project_create_success",
6323
+ projectCreateFailed: "project_create_failed",
6324
+ projectSaveSuccess: "project_save_success",
6325
+ projectSaveFailed: "project_save_failed",
6326
+ projectUpdateDbSuccess: "project_update_db_success",
6327
+ projectUpdateDbFailed: "project_update_db_failed",
6328
+ projectUpdateWorkerSuccess: "project_update_worker_success",
6329
+ projectUpdateWorkerFailed: "project_update_worker_failed",
6330
+ projectDeleteSuccess: "project_delete_success",
6331
+ projectDeleteFailed: "project_delete_failed",
6332
+ projectUpdateWebSuccess: "project_update_web_success",
6333
+ projectUpdateWebFailed: "project_update_web_failed",
6334
+ appKeyShownSuccess: "appkey_shown_success",
6335
+ appKeyShownFailed: "appkey_shown_failed",
6336
+ uploadHistoryViewed: "upload_history_viewed",
6337
+ uploadHistoryCleared: "upload_history_cleared",
6338
+ uploadHistoryFailed: "upload_history_failed"
6339
+ };
6340
+ var TRACK_ACTIONS = {
6341
+ init: "init",
6342
+ click: "click",
6343
+ view: "view",
6344
+ exposure: "exposure",
6345
+ submit: "submit",
6346
+ success: "success",
6347
+ fail: "fail"
6348
+ };
6349
+ function resolveTrackAction2(event) {
6350
+ switch (event) {
6351
+ case TRACK_EVENTS.uploadHistoryViewed:
6352
+ case TRACK_EVENTS.myDomainsSuccess:
6353
+ case TRACK_EVENTS.walletBalanceSuccess:
6354
+ case TRACK_EVENTS.appKeyShownSuccess:
6355
+ return TRACK_ACTIONS.view;
6356
+ case TRACK_EVENTS.uploadHistoryCleared:
6357
+ return TRACK_ACTIONS.click;
6358
+ case TRACK_EVENTS.uploadSuccess:
6359
+ case TRACK_EVENTS.importSuccess:
6360
+ case TRACK_EVENTS.exportSuccess:
6361
+ case TRACK_EVENTS.removeSuccess:
6362
+ case TRACK_EVENTS.domainBindSuccess:
6363
+ case TRACK_EVENTS.cliLoginSuccess:
6364
+ case TRACK_EVENTS.appKeySetSuccess:
6365
+ case TRACK_EVENTS.logoutSuccess:
6366
+ case TRACK_EVENTS.projectCreateSuccess:
6367
+ case TRACK_EVENTS.projectSaveSuccess:
6368
+ case TRACK_EVENTS.projectUpdateDbSuccess:
6369
+ case TRACK_EVENTS.projectUpdateWorkerSuccess:
6370
+ case TRACK_EVENTS.projectUpdateWebSuccess:
6371
+ case TRACK_EVENTS.projectDeleteSuccess:
6372
+ return TRACK_ACTIONS.success;
6373
+ case TRACK_EVENTS.uploadFailed:
6374
+ case TRACK_EVENTS.importFailed:
6375
+ case TRACK_EVENTS.exportFailed:
6376
+ case TRACK_EVENTS.removeFailed:
6377
+ case TRACK_EVENTS.domainBindFailed:
6378
+ case TRACK_EVENTS.cliLoginFailed:
6379
+ case TRACK_EVENTS.appKeySetFailed:
6380
+ case TRACK_EVENTS.logoutFailed:
6381
+ case TRACK_EVENTS.myDomainsFailed:
6382
+ case TRACK_EVENTS.walletBalanceFailed:
6383
+ case TRACK_EVENTS.projectCreateFailed:
6384
+ case TRACK_EVENTS.projectSaveFailed:
6385
+ case TRACK_EVENTS.projectUpdateDbFailed:
6386
+ case TRACK_EVENTS.projectUpdateWorkerFailed:
6387
+ case TRACK_EVENTS.projectUpdateWebFailed:
6388
+ case TRACK_EVENTS.projectDeleteFailed:
6389
+ case TRACK_EVENTS.appKeyShownFailed:
6390
+ case TRACK_EVENTS.uploadHistoryFailed:
6391
+ return TRACK_ACTIONS.fail;
6392
+ default:
6393
+ return TRACK_ACTIONS.view;
6394
+ }
6395
+ }
6396
+
6397
+ // bin/utils/history.ts
6398
+ var HISTORY_DIR = import_path5.default.join(import_os4.default.homedir(), ".pinme");
6399
+ var HISTORY_FILE = import_path5.default.join(HISTORY_DIR, "upload-history.json");
6087
6400
  var ensureHistoryDir = () => {
6088
6401
  if (!import_fs_extra3.default.existsSync(HISTORY_DIR)) {
6089
6402
  import_fs_extra3.default.mkdirSync(HISTORY_DIR, { recursive: true });
@@ -6100,7 +6413,7 @@ var saveUploadHistory = (uploadData) => {
6100
6413
  timestamp: Date.now(),
6101
6414
  date: (0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss"),
6102
6415
  path: uploadData.path,
6103
- filename: uploadData.filename || import_path4.default.basename(uploadData.path),
6416
+ filename: uploadData.filename || import_path5.default.basename(uploadData.path),
6104
6417
  contentHash: uploadData.contentHash,
6105
6418
  previewHash: uploadData.previewHash,
6106
6419
  size: uploadData.size,
@@ -6159,55 +6472,78 @@ async function formatHistoryUrl(value, options) {
6159
6472
  return `https://${normalized}`;
6160
6473
  }
6161
6474
  var displayUploadHistory = async (limit = 10) => {
6162
- const history = getUploadHistory(limit);
6163
- if (history.length === 0) {
6164
- console.log(import_chalk5.default.yellow("No upload history found."));
6165
- return;
6166
- }
6167
- console.log(import_chalk5.default.cyan("Upload History:"));
6168
- console.log(import_chalk5.default.cyan("-".repeat(80)));
6169
- let rootDomain = null;
6170
6475
  try {
6171
- rootDomain = await getRootDomain();
6172
- } catch {
6173
- rootDomain = null;
6174
- }
6175
- const recentHistory = history.slice(-limit);
6176
- for (const [index, item] of recentHistory.entries()) {
6177
- console.log(import_chalk5.default.green(`${index + 1}. ${item.filename}`));
6178
- console.log(import_chalk5.default.white(` Path: ${item.path}`));
6179
- console.log(import_chalk5.default.white(` IPFS CID: ${item.contentHash}`));
6180
- const preferredUrl = await formatHistoryUrl(item.dnsUrl) || await formatHistoryUrl(item.pinmeUrl, {
6181
- appendRootDomain: true,
6182
- rootDomain
6183
- }) || await formatHistoryUrl(item.shortUrl, {
6184
- appendRootDomain: true,
6185
- rootDomain
6476
+ const history = getUploadHistory(limit);
6477
+ void tracker_default.trackEvent(TRACK_EVENTS.uploadHistoryViewed, TRACK_PAGES.upload, {
6478
+ a: resolveTrackAction2(TRACK_EVENTS.uploadHistoryViewed),
6479
+ record_count: history.length,
6480
+ limit
6186
6481
  });
6187
- if (preferredUrl) {
6188
- console.log(import_chalk5.default.white(` URL: ${preferredUrl}`));
6189
- }
6190
- console.log(import_chalk5.default.white(` Size: ${formatSize(item.size)}`));
6191
- console.log(import_chalk5.default.white(` Files: ${item.fileCount}`));
6192
- console.log(import_chalk5.default.white(` Type: ${item.type === "directory" ? "Directory" : "File"}`));
6193
- if (item.timestamp) {
6194
- console.log(import_chalk5.default.white(` Date: ${new Date(item.timestamp).toLocaleString()}`));
6482
+ if (history.length === 0) {
6483
+ console.log(import_chalk5.default.yellow("No upload history found."));
6484
+ return;
6195
6485
  }
6486
+ console.log(import_chalk5.default.cyan("Upload History:"));
6196
6487
  console.log(import_chalk5.default.cyan("-".repeat(80)));
6488
+ let rootDomain = null;
6489
+ try {
6490
+ rootDomain = await getRootDomain();
6491
+ } catch {
6492
+ rootDomain = null;
6493
+ }
6494
+ const recentHistory = history.slice(-limit);
6495
+ for (const [index, item] of recentHistory.entries()) {
6496
+ console.log(import_chalk5.default.green(`${index + 1}. ${item.filename}`));
6497
+ console.log(import_chalk5.default.white(` Path: ${item.path}`));
6498
+ console.log(import_chalk5.default.white(` IPFS CID: ${item.contentHash}`));
6499
+ const preferredUrl = await formatHistoryUrl(item.dnsUrl) || await formatHistoryUrl(item.pinmeUrl, {
6500
+ appendRootDomain: true,
6501
+ rootDomain
6502
+ }) || await formatHistoryUrl(item.shortUrl, {
6503
+ appendRootDomain: true,
6504
+ rootDomain
6505
+ });
6506
+ if (preferredUrl) {
6507
+ console.log(import_chalk5.default.white(` URL: ${preferredUrl}`));
6508
+ }
6509
+ console.log(import_chalk5.default.white(` Size: ${formatSize(item.size)}`));
6510
+ console.log(import_chalk5.default.white(` Files: ${item.fileCount}`));
6511
+ console.log(import_chalk5.default.white(` Type: ${item.type === "directory" ? "Directory" : "File"}`));
6512
+ if (item.timestamp) {
6513
+ console.log(import_chalk5.default.white(` Date: ${new Date(item.timestamp).toLocaleString()}`));
6514
+ }
6515
+ console.log(import_chalk5.default.cyan("-".repeat(80)));
6516
+ }
6517
+ const totalSize = history.reduce((sum, record) => sum + record.size, 0);
6518
+ const totalFiles = history.reduce((sum, record) => sum + record.fileCount, 0);
6519
+ console.log(import_chalk5.default.bold(`Total Uploads: ${history.length}`));
6520
+ console.log(import_chalk5.default.bold(`Total Files: ${totalFiles}`));
6521
+ console.log(import_chalk5.default.bold(`Total Size: ${formatSize(totalSize)}`));
6522
+ } catch (error) {
6523
+ void tracker_default.trackEvent(TRACK_EVENTS.uploadHistoryFailed, TRACK_PAGES.upload, {
6524
+ a: resolveTrackAction2(TRACK_EVENTS.uploadHistoryFailed),
6525
+ action: "view",
6526
+ reason: getTrackErrorReason(error)
6527
+ });
6528
+ throw error;
6197
6529
  }
6198
- const totalSize = history.reduce((sum, record) => sum + record.size, 0);
6199
- const totalFiles = history.reduce((sum, record) => sum + record.fileCount, 0);
6200
- console.log(import_chalk5.default.bold(`Total Uploads: ${history.length}`));
6201
- console.log(import_chalk5.default.bold(`Total Files: ${totalFiles}`));
6202
- console.log(import_chalk5.default.bold(`Total Size: ${formatSize(totalSize)}`));
6203
6530
  };
6204
6531
  var clearUploadHistory = () => {
6205
6532
  try {
6206
6533
  ensureHistoryDir();
6207
6534
  import_fs_extra3.default.writeJsonSync(HISTORY_FILE, { uploads: [] });
6535
+ void tracker_default.trackEvent(TRACK_EVENTS.uploadHistoryCleared, TRACK_PAGES.upload, {
6536
+ a: resolveTrackAction2(TRACK_EVENTS.uploadHistoryCleared),
6537
+ cleared: true
6538
+ });
6208
6539
  console.log(import_chalk5.default.green("Upload history cleared successfully."));
6209
6540
  return true;
6210
6541
  } catch (error) {
6542
+ void tracker_default.trackEvent(TRACK_EVENTS.uploadHistoryFailed, TRACK_PAGES.upload, {
6543
+ a: resolveTrackAction2(TRACK_EVENTS.uploadHistoryFailed),
6544
+ action: "clear",
6545
+ reason: getTrackErrorReason(error)
6546
+ });
6211
6547
  console.error(import_chalk5.default.red(`Error clearing upload history: ${error.message}`));
6212
6548
  return false;
6213
6549
  }
@@ -6411,9 +6747,9 @@ async function compressDirectory(sourcePath) {
6411
6747
  if (!import_fs_extra4.default.existsSync(tempDir)) {
6412
6748
  import_fs_extra4.default.mkdirSync(tempDir, { recursive: true });
6413
6749
  }
6414
- const outputPath = import_path5.default.join(
6750
+ const outputPath = import_path6.default.join(
6415
6751
  tempDir,
6416
- `pinme_${import_path5.default.basename(sourcePath)}_${Date.now()}.zip`
6752
+ `pinme_${import_path6.default.basename(sourcePath)}_${Date.now()}.zip`
6417
6753
  );
6418
6754
  const output = import_fs_extra4.default.createWriteStream(outputPath);
6419
6755
  const zlib2 = require("zlib");
@@ -6438,7 +6774,7 @@ async function compressDirectory(sourcePath) {
6438
6774
  async function initChunkSession(filePath, deviceId, options = {}, isDirectory = false) {
6439
6775
  var _a2;
6440
6776
  const stats = import_fs_extra4.default.statSync(filePath);
6441
- const fileName = import_path5.default.basename(filePath);
6777
+ const fileName = import_path6.default.basename(filePath);
6442
6778
  const fileSize = stats.size;
6443
6779
  const md5 = await calculateMD5(filePath);
6444
6780
  try {
@@ -6768,7 +7104,7 @@ async function uploadDirectoryInChunks(directoryPath, deviceId, options = {}) {
6768
7104
  )} (size: ${formatSize(sizeCheck.size)})`
6769
7105
  );
6770
7106
  }
6771
- const progressBar = new StepProgressBar(import_path5.default.basename(directoryPath), true);
7107
+ const progressBar = new StepProgressBar(import_path6.default.basename(directoryPath), true);
6772
7108
  try {
6773
7109
  progressBar.startStep(0, "Preparing compression");
6774
7110
  const compressedPath = await compressDirectory(directoryPath);
@@ -6812,7 +7148,7 @@ async function uploadDirectoryInChunks(directoryPath, deviceId, options = {}) {
6812
7148
  }
6813
7149
  const uploadData = {
6814
7150
  path: directoryPath,
6815
- filename: import_path5.default.basename(directoryPath),
7151
+ filename: import_path6.default.basename(directoryPath),
6816
7152
  contentHash: (result == null ? void 0 : result.hash) || "unknown",
6817
7153
  size: sizeCheck.size,
6818
7154
  fileCount: 0,
@@ -6841,7 +7177,7 @@ async function uploadFileInChunks(filePath, deviceId, options = {}) {
6841
7177
  )} (size: ${formatSize(sizeCheck.size)})`
6842
7178
  );
6843
7179
  }
6844
- const fileName = import_path5.default.basename(filePath);
7180
+ const fileName = import_path6.default.basename(filePath);
6845
7181
  const progressBar = new StepProgressBar(fileName, false);
6846
7182
  try {
6847
7183
  progressBar.startStep(0, "Initializing session");
@@ -7031,206 +7367,6 @@ function printHighlightedUrl(label, url2, tone = "primary") {
7031
7367
  console.log("");
7032
7368
  }
7033
7369
 
7034
- // bin/utils/tracker.ts
7035
- var import_os4 = __toESM(require("os"));
7036
- var import_fs2 = __toESM(require("fs"));
7037
- var import_path6 = __toESM(require("path"));
7038
- var import_child_process2 = require("child_process");
7039
- var REQUEST_TIMEOUT_MS = 1500;
7040
- var DEFAULT_GATEWAY = "https://pinme.dev";
7041
- var DEFAULT_PRODUCT = "pinme-cli";
7042
- var TRACK_CHILD_SCRIPT = `
7043
- const rawUrl = process.argv[1];
7044
- if (!rawUrl) process.exit(0);
7045
- try {
7046
- const transport = rawUrl.startsWith('https:') ? require('https') : require('http');
7047
- const req = transport.get(rawUrl, {
7048
- headers: {
7049
- 'User-Agent': 'Pinme-CLI-Tracker'
7050
- }
7051
- }, (res) => {
7052
- res.resume();
7053
- res.on('end', () => process.exit(0));
7054
- });
7055
- req.setTimeout(${REQUEST_TIMEOUT_MS}, () => req.destroy());
7056
- req.on('error', () => process.exit(0));
7057
- req.on('close', () => process.exit(0));
7058
- } catch (_) {
7059
- process.exit(0);
7060
- }
7061
- `;
7062
- function trimTrailingSlash2(value) {
7063
- return value.replace(/\/+$/, "");
7064
- }
7065
- function shouldDisableTracking() {
7066
- return process.env.PINME_TRACKING_DISABLED === "1" || process.env.DO_NOT_TRACK === "1";
7067
- }
7068
- function sanitizeTrackValue(value) {
7069
- if (value === void 0 || value === null) {
7070
- return void 0;
7071
- }
7072
- return String(value).trim().slice(0, 200);
7073
- }
7074
- function getTrackErrorReason(error) {
7075
- var _a2, _b, _c, _d, _e;
7076
- const candidate = ((_b = (_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.data) == null ? void 0 : _b.msg) || ((_d = (_c = error == null ? void 0 : error.response) == null ? void 0 : _c.data) == null ? void 0 : _d.message) || (error == null ? void 0 : error.message) || ((_e = error == null ? void 0 : error.toString) == null ? void 0 : _e.call(error)) || "unknown_error";
7077
- return sanitizeTrackValue(candidate) || "unknown_error";
7078
- }
7079
- var cachedProjectContext = null;
7080
- var cachedProjectContextCwd = null;
7081
- function resolveProjectContext() {
7082
- const cwd = process.cwd();
7083
- if (cachedProjectContext && cachedProjectContextCwd === cwd) {
7084
- return cachedProjectContext;
7085
- }
7086
- const context = {};
7087
- const configPath = import_path6.default.join(cwd, "pinme.toml");
7088
- if (import_fs2.default.existsSync(configPath)) {
7089
- try {
7090
- const configContent = import_fs2.default.readFileSync(configPath, "utf8");
7091
- const projectNameMatch = configContent.match(
7092
- /project_name\s*=\s*"([^"]+)"/
7093
- );
7094
- context.projectName = sanitizeTrackValue(projectNameMatch == null ? void 0 : projectNameMatch[1]) || sanitizeTrackValue(process.env.PINME_PROJECT_NAME);
7095
- context.projectDir = sanitizeTrackValue(import_path6.default.basename(cwd));
7096
- } catch (_) {
7097
- context.projectName = sanitizeTrackValue(process.env.PINME_PROJECT_NAME);
7098
- }
7099
- } else {
7100
- context.projectName = sanitizeTrackValue(process.env.PINME_PROJECT_NAME);
7101
- }
7102
- cachedProjectContext = context;
7103
- cachedProjectContextCwd = cwd;
7104
- return context;
7105
- }
7106
- function getPathKind(pathValue) {
7107
- try {
7108
- const stat = import_fs2.default.statSync(pathValue);
7109
- if (stat.isDirectory()) {
7110
- return "directory";
7111
- }
7112
- if (stat.isFile()) {
7113
- return "file";
7114
- }
7115
- } catch (_) {
7116
- return "unknown";
7117
- }
7118
- return "unknown";
7119
- }
7120
- var Tracker = class _Tracker {
7121
- static instance;
7122
- gateway;
7123
- product;
7124
- source;
7125
- disabled;
7126
- constructor(gateway, product) {
7127
- this.gateway = trimTrailingSlash2(
7128
- gateway || process.env.PINME_TRACKER_GATEWAY || DEFAULT_GATEWAY
7129
- );
7130
- this.product = product || DEFAULT_PRODUCT;
7131
- this.source = sanitizeTrackValue(process.env.PINME_TRACK_SOURCE);
7132
- this.disabled = shouldDisableTracking();
7133
- }
7134
- static getInstance(gateway, product) {
7135
- if (!_Tracker.instance) {
7136
- _Tracker.instance = new _Tracker(gateway, product);
7137
- }
7138
- return _Tracker.instance;
7139
- }
7140
- trackEvent(event, page, data = {}) {
7141
- if (this.disabled || !this.gateway) {
7142
- return Promise.resolve();
7143
- }
7144
- try {
7145
- const payload = this.buildPayload(event, page, data);
7146
- const params = new URLSearchParams(payload).toString();
7147
- const url2 = `${this.gateway}/track.gif?${params}`;
7148
- this.dispatch(url2);
7149
- } catch (_) {
7150
- }
7151
- return Promise.resolve();
7152
- }
7153
- buildPayload(event, page, data) {
7154
- const projectContext = resolveProjectContext();
7155
- const payload = {
7156
- u: getUid(),
7157
- s: this.source,
7158
- pd: this.product,
7159
- p: page,
7160
- event,
7161
- project_name: projectContext.projectName,
7162
- project_dir: projectContext.projectDir,
7163
- cli_version: version,
7164
- node_version: process.version,
7165
- os: import_os4.default.platform(),
7166
- arch: import_os4.default.arch(),
7167
- ...data
7168
- };
7169
- const filtered = {};
7170
- for (const [key, value] of Object.entries(payload)) {
7171
- const normalized = sanitizeTrackValue(value);
7172
- if (normalized) {
7173
- filtered[key] = normalized;
7174
- }
7175
- }
7176
- return filtered;
7177
- }
7178
- dispatch(url2) {
7179
- const child = (0, import_child_process2.spawn)(process.execPath, ["-e", TRACK_CHILD_SCRIPT, url2], {
7180
- detached: true,
7181
- stdio: "ignore",
7182
- windowsHide: true
7183
- });
7184
- child.unref();
7185
- }
7186
- };
7187
- var tracker = Tracker.getInstance();
7188
- var tracker_default = tracker;
7189
-
7190
- // bin/utils/trackerEvents.ts
7191
- var TRACK_PAGES = {
7192
- auth: "cli_auth",
7193
- login: "cli_login",
7194
- upload: "cli_upload",
7195
- import: "cli_import",
7196
- export: "cli_export",
7197
- remove: "cli_remove",
7198
- domain: "cli_domain",
7199
- wallet: "cli_wallet",
7200
- project: "cli_project",
7201
- deploy: "cli_deploy"
7202
- };
7203
- var TRACK_EVENTS = {
7204
- cliLoginSuccess: "cli_login_success",
7205
- cliLoginFailed: "cli_login_failed",
7206
- appKeySetSuccess: "appkey_set_success",
7207
- appKeySetFailed: "appkey_set_failed",
7208
- logoutSuccess: "logout_success",
7209
- logoutFailed: "logout_failed",
7210
- uploadSuccess: "upload_success",
7211
- uploadFailed: "upload_failed",
7212
- importSuccess: "import_success",
7213
- importFailed: "import_failed",
7214
- exportSuccess: "export_success",
7215
- exportFailed: "export_failed",
7216
- removeSuccess: "remove_success",
7217
- removeFailed: "remove_failed",
7218
- domainBindSuccess: "domain_bind_success",
7219
- domainBindFailed: "domain_bind_failed",
7220
- myDomainsSuccess: "my_domains_success",
7221
- myDomainsFailed: "my_domains_failed",
7222
- walletBalanceSuccess: "wallet_balance_success",
7223
- walletBalanceFailed: "wallet_balance_failed",
7224
- projectCreateSuccess: "project_create_success",
7225
- projectCreateFailed: "project_create_failed",
7226
- projectSaveSuccess: "project_save_success",
7227
- projectSaveFailed: "project_save_failed",
7228
- projectDeleteSuccess: "project_delete_success",
7229
- projectDeleteFailed: "project_delete_failed",
7230
- projectUpdateWebSuccess: "project_update_web_success",
7231
- projectUpdateWebFailed: "project_update_web_failed"
7232
- };
7233
-
7234
7370
  // bin/upload.ts
7235
7371
  checkNodeVersion();
7236
7372
  function checkPathSync(inputPath) {
@@ -7308,6 +7444,7 @@ async function bindDomain(domain, contentHash, isDns, authConfig) {
7308
7444
  );
7309
7445
  if (dnsResult.code !== 200) {
7310
7446
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindFailed, TRACK_PAGES.domain, {
7447
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindFailed),
7311
7448
  domain_type: domainType,
7312
7449
  domain_name: displayDomain,
7313
7450
  bind_source: "upload",
@@ -7317,6 +7454,7 @@ async function bindDomain(domain, contentHash, isDns, authConfig) {
7317
7454
  return false;
7318
7455
  }
7319
7456
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindSuccess, TRACK_PAGES.domain, {
7457
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindSuccess),
7320
7458
  domain_type: domainType,
7321
7459
  domain_name: displayDomain,
7322
7460
  bind_source: "upload"
@@ -7333,6 +7471,7 @@ async function bindDomain(domain, contentHash, isDns, authConfig) {
7333
7471
  const ok = await bindPinmeDomain(displayDomain, contentHash);
7334
7472
  if (!ok) {
7335
7473
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindFailed, TRACK_PAGES.domain, {
7474
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindFailed),
7336
7475
  domain_type: domainType,
7337
7476
  domain_name: displayDomain,
7338
7477
  bind_source: "upload",
@@ -7342,6 +7481,7 @@ async function bindDomain(domain, contentHash, isDns, authConfig) {
7342
7481
  return false;
7343
7482
  }
7344
7483
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindSuccess, TRACK_PAGES.domain, {
7484
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindSuccess),
7345
7485
  domain_type: domainType,
7346
7486
  domain_name: displayDomain,
7347
7487
  bind_source: "upload"
@@ -7434,6 +7574,7 @@ var upload_default = async (options) => {
7434
7574
  });
7435
7575
  } catch (error) {
7436
7576
  void tracker_default.trackEvent(TRACK_EVENTS.uploadFailed, TRACK_PAGES.upload, {
7577
+ a: resolveTrackAction2(TRACK_EVENTS.uploadFailed),
7437
7578
  path_kind: pathKind,
7438
7579
  has_domain: Boolean(domainArg),
7439
7580
  reason: getTrackErrorReason(error)
@@ -7443,6 +7584,7 @@ var upload_default = async (options) => {
7443
7584
  }
7444
7585
  if (!result) {
7445
7586
  void tracker_default.trackEvent(TRACK_EVENTS.uploadFailed, TRACK_PAGES.upload, {
7587
+ a: resolveTrackAction2(TRACK_EVENTS.uploadFailed),
7446
7588
  path_kind: pathKind,
7447
7589
  has_domain: Boolean(domainArg),
7448
7590
  reason: "no_result_returned"
@@ -7451,6 +7593,7 @@ var upload_default = async (options) => {
7451
7593
  process.exit(1);
7452
7594
  }
7453
7595
  void tracker_default.trackEvent(TRACK_EVENTS.uploadSuccess, TRACK_PAGES.upload, {
7596
+ a: resolveTrackAction2(TRACK_EVENTS.uploadSuccess),
7454
7597
  path_kind: pathKind,
7455
7598
  has_domain: Boolean(domainArg),
7456
7599
  project_name: APP_CONFIG.pinmeProjectName
@@ -7490,6 +7633,7 @@ var upload_default = async (options) => {
7490
7633
  console.log(import_chalk7.default.red(`path ${answer.path} does not exist`));
7491
7634
  return;
7492
7635
  }
7636
+ const pathKind = getPathKind(absolutePath);
7493
7637
  const isDns = dnsArg || (domainArg ? isDnsDomain(domainArg) : false);
7494
7638
  const displayDomain = domainArg == null ? void 0 : domainArg.replace(/^https?:\/\//, "").replace(/\/$/, "");
7495
7639
  if (isDns && domainArg) {
@@ -7545,13 +7689,31 @@ var upload_default = async (options) => {
7545
7689
  uid: authConfig == null ? void 0 : authConfig.address
7546
7690
  });
7547
7691
  } catch (error) {
7692
+ void tracker_default.trackEvent(TRACK_EVENTS.uploadFailed, TRACK_PAGES.upload, {
7693
+ a: resolveTrackAction2(TRACK_EVENTS.uploadFailed),
7694
+ path_kind: pathKind,
7695
+ has_domain: Boolean(domainArg),
7696
+ reason: getTrackErrorReason(error)
7697
+ });
7548
7698
  printCliError(error, "Upload failed.");
7549
7699
  process.exit(1);
7550
7700
  }
7551
7701
  if (!result) {
7702
+ void tracker_default.trackEvent(TRACK_EVENTS.uploadFailed, TRACK_PAGES.upload, {
7703
+ a: resolveTrackAction2(TRACK_EVENTS.uploadFailed),
7704
+ path_kind: pathKind,
7705
+ has_domain: Boolean(domainArg),
7706
+ reason: "no_result_returned"
7707
+ });
7552
7708
  console.error(import_chalk7.default.red("Upload failed: no result returned"));
7553
7709
  process.exit(1);
7554
7710
  }
7711
+ void tracker_default.trackEvent(TRACK_EVENTS.uploadSuccess, TRACK_PAGES.upload, {
7712
+ a: resolveTrackAction2(TRACK_EVENTS.uploadSuccess),
7713
+ path_kind: pathKind,
7714
+ has_domain: Boolean(domainArg),
7715
+ project_name: APP_CONFIG.pinmeProjectName
7716
+ });
7555
7717
  console.log(
7556
7718
  import_chalk7.default.cyan(import_figlet.default.textSync("Successful", { horizontalLayout: "full" }))
7557
7719
  );
@@ -7677,6 +7839,7 @@ var importCar_default = async (options) => {
7677
7839
  });
7678
7840
  if (result) {
7679
7841
  void tracker_default.trackEvent(TRACK_EVENTS.importSuccess, TRACK_PAGES.import, {
7842
+ a: resolveTrackAction2(TRACK_EVENTS.importSuccess),
7680
7843
  path_kind: pathKind,
7681
7844
  has_domain: Boolean(domainArg)
7682
7845
  });
@@ -7705,6 +7868,7 @@ var importCar_default = async (options) => {
7705
7868
  const ok = await bindPinmeDomain(domainArg, result.contentHash);
7706
7869
  if (ok) {
7707
7870
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindSuccess, TRACK_PAGES.domain, {
7871
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindSuccess),
7708
7872
  domain_type: "pinme_subdomain",
7709
7873
  domain_name: domainArg,
7710
7874
  bind_source: "import"
@@ -7718,6 +7882,7 @@ var importCar_default = async (options) => {
7718
7882
  );
7719
7883
  } else {
7720
7884
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindFailed, TRACK_PAGES.domain, {
7885
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindFailed),
7721
7886
  domain_type: "pinme_subdomain",
7722
7887
  domain_name: domainArg,
7723
7888
  bind_source: "import",
@@ -7730,6 +7895,7 @@ var importCar_default = async (options) => {
7730
7895
  }
7731
7896
  } catch (error) {
7732
7897
  void tracker_default.trackEvent(TRACK_EVENTS.importFailed, TRACK_PAGES.import, {
7898
+ a: resolveTrackAction2(TRACK_EVENTS.importFailed),
7733
7899
  path_kind: pathKind,
7734
7900
  has_domain: Boolean(domainArg),
7735
7901
  reason: getTrackErrorReason(error)
@@ -7772,6 +7938,7 @@ var importCar_default = async (options) => {
7772
7938
  });
7773
7939
  if (result) {
7774
7940
  void tracker_default.trackEvent(TRACK_EVENTS.importSuccess, TRACK_PAGES.import, {
7941
+ a: resolveTrackAction2(TRACK_EVENTS.importSuccess),
7775
7942
  path_kind: pathKind,
7776
7943
  has_domain: Boolean(domainArg)
7777
7944
  });
@@ -7800,6 +7967,7 @@ var importCar_default = async (options) => {
7800
7967
  const ok = await bindPinmeDomain(domainArg, result.contentHash);
7801
7968
  if (ok) {
7802
7969
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindSuccess, TRACK_PAGES.domain, {
7970
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindSuccess),
7803
7971
  domain_type: "pinme_subdomain",
7804
7972
  domain_name: domainArg,
7805
7973
  bind_source: "import"
@@ -7813,6 +7981,7 @@ var importCar_default = async (options) => {
7813
7981
  );
7814
7982
  } else {
7815
7983
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindFailed, TRACK_PAGES.domain, {
7984
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindFailed),
7816
7985
  domain_type: "pinme_subdomain",
7817
7986
  domain_name: domainArg,
7818
7987
  bind_source: "import",
@@ -7825,6 +7994,7 @@ var importCar_default = async (options) => {
7825
7994
  }
7826
7995
  } catch (error) {
7827
7996
  void tracker_default.trackEvent(TRACK_EVENTS.importFailed, TRACK_PAGES.import, {
7997
+ a: resolveTrackAction2(TRACK_EVENTS.importFailed),
7828
7998
  path_kind: pathKind,
7829
7999
  has_domain: Boolean(domainArg),
7830
8000
  reason: getTrackErrorReason(error)
@@ -7835,6 +8005,7 @@ var importCar_default = async (options) => {
7835
8005
  }
7836
8006
  } catch (error) {
7837
8007
  void tracker_default.trackEvent(TRACK_EVENTS.importFailed, TRACK_PAGES.import, {
8008
+ a: resolveTrackAction2(TRACK_EVENTS.importFailed),
7838
8009
  reason: getTrackErrorReason(error)
7839
8010
  });
7840
8011
  printCliError(error, "Import failed.");
@@ -8022,6 +8193,7 @@ var exportCar_default = async () => {
8022
8193
  );
8023
8194
  if (!downloadUrl) {
8024
8195
  void tracker_default.trackEvent(TRACK_EVENTS.exportFailed, TRACK_PAGES.export, {
8196
+ a: resolveTrackAction2(TRACK_EVENTS.exportFailed),
8025
8197
  cid,
8026
8198
  reason: "export_failed_or_timed_out"
8027
8199
  });
@@ -8031,6 +8203,7 @@ var exportCar_default = async () => {
8031
8203
  const success = await downloadCarFile(downloadUrl, finalOutputPath);
8032
8204
  if (success) {
8033
8205
  void tracker_default.trackEvent(TRACK_EVENTS.exportSuccess, TRACK_PAGES.export, {
8206
+ a: resolveTrackAction2(TRACK_EVENTS.exportSuccess),
8034
8207
  cid,
8035
8208
  output_dir: outputDir
8036
8209
  });
@@ -8048,6 +8221,7 @@ var exportCar_default = async () => {
8048
8221
  console.log(import_chalk9.default.cyan(`CID: ${cid}`));
8049
8222
  } else {
8050
8223
  void tracker_default.trackEvent(TRACK_EVENTS.exportFailed, TRACK_PAGES.export, {
8224
+ a: resolveTrackAction2(TRACK_EVENTS.exportFailed),
8051
8225
  cid,
8052
8226
  reason: "download_failed"
8053
8227
  });
@@ -8055,6 +8229,7 @@ var exportCar_default = async () => {
8055
8229
  }
8056
8230
  } catch (error) {
8057
8231
  void tracker_default.trackEvent(TRACK_EVENTS.exportFailed, TRACK_PAGES.export, {
8232
+ a: resolveTrackAction2(TRACK_EVENTS.exportFailed),
8058
8233
  cid,
8059
8234
  reason: getTrackErrorReason(error)
8060
8235
  });
@@ -8063,6 +8238,7 @@ var exportCar_default = async () => {
8063
8238
  }
8064
8239
  } catch (error) {
8065
8240
  void tracker_default.trackEvent(TRACK_EVENTS.exportFailed, TRACK_PAGES.export, {
8241
+ a: resolveTrackAction2(TRACK_EVENTS.exportFailed),
8066
8242
  reason: getTrackErrorReason(error)
8067
8243
  });
8068
8244
  printCliError(error, "Export failed.");
@@ -8213,6 +8389,7 @@ var remove_default = async (options) => {
8213
8389
  const success = await removeFromIpfs(parsedInput.value, parsedInput.type);
8214
8390
  if (success) {
8215
8391
  void tracker_default.trackEvent(TRACK_EVENTS.removeSuccess, TRACK_PAGES.remove, {
8392
+ a: resolveTrackAction2(TRACK_EVENTS.removeSuccess),
8216
8393
  input_type: parsedInput.type
8217
8394
  });
8218
8395
  console.log(
@@ -8223,6 +8400,7 @@ var remove_default = async (options) => {
8223
8400
  }
8224
8401
  } catch (error) {
8225
8402
  void tracker_default.trackEvent(TRACK_EVENTS.removeFailed, TRACK_PAGES.remove, {
8403
+ a: resolveTrackAction2(TRACK_EVENTS.removeFailed),
8226
8404
  input_type: parsedInput.type,
8227
8405
  reason: getTrackErrorReason(error)
8228
8406
  });
@@ -8284,6 +8462,7 @@ var remove_default = async (options) => {
8284
8462
  const success = await removeFromIpfs(parsedInput.value, parsedInput.type);
8285
8463
  if (success) {
8286
8464
  void tracker_default.trackEvent(TRACK_EVENTS.removeSuccess, TRACK_PAGES.remove, {
8465
+ a: resolveTrackAction2(TRACK_EVENTS.removeSuccess),
8287
8466
  input_type: parsedInput.type
8288
8467
  });
8289
8468
  console.log(
@@ -8294,6 +8473,7 @@ var remove_default = async (options) => {
8294
8473
  }
8295
8474
  } catch (error) {
8296
8475
  void tracker_default.trackEvent(TRACK_EVENTS.removeFailed, TRACK_PAGES.remove, {
8476
+ a: resolveTrackAction2(TRACK_EVENTS.removeFailed),
8297
8477
  input_type: parsedInput.type,
8298
8478
  reason: getTrackErrorReason(error)
8299
8479
  });
@@ -8302,6 +8482,7 @@ var remove_default = async (options) => {
8302
8482
  }
8303
8483
  } catch (error) {
8304
8484
  void tracker_default.trackEvent(TRACK_EVENTS.removeFailed, TRACK_PAGES.remove, {
8485
+ a: resolveTrackAction2(TRACK_EVENTS.removeFailed),
8305
8486
  reason: getTrackErrorReason(error)
8306
8487
  });
8307
8488
  console.error(import_chalk11.default.red(`Error executing remove command: ${error.message}`));
@@ -8342,11 +8523,13 @@ async function setAppKeyCmd() {
8342
8523
  console.log(import_chalk12.default.yellow("Anonymous history merge not confirmed. You may retry later."));
8343
8524
  }
8344
8525
  void tracker_default.trackEvent(TRACK_EVENTS.appKeySetSuccess, TRACK_PAGES.auth, {
8526
+ a: resolveTrackAction2(TRACK_EVENTS.appKeySetSuccess),
8345
8527
  merged_anonymous_history: ok,
8346
8528
  has_token_address: Boolean(saved.address)
8347
8529
  });
8348
8530
  } catch (e) {
8349
8531
  void tracker_default.trackEvent(TRACK_EVENTS.appKeySetFailed, TRACK_PAGES.auth, {
8532
+ a: resolveTrackAction2(TRACK_EVENTS.appKeySetFailed),
8350
8533
  reason: getTrackErrorReason(e)
8351
8534
  });
8352
8535
  console.log(import_chalk12.default.red(`Failed to set AppKey: ${(e == null ? void 0 : e.message) || e}`));
@@ -8378,12 +8561,14 @@ async function logoutCmd() {
8378
8561
  }
8379
8562
  clearAuthToken();
8380
8563
  void tracker_default.trackEvent(TRACK_EVENTS.logoutSuccess, TRACK_PAGES.auth, {
8564
+ a: resolveTrackAction2(TRACK_EVENTS.logoutSuccess),
8381
8565
  had_session: true
8382
8566
  });
8383
8567
  console.log(import_chalk13.default.green("Successfully logged out."));
8384
8568
  console.log(import_chalk13.default.gray(`Address ${auth.address} has been removed from local storage.`));
8385
8569
  } catch (e) {
8386
8570
  void tracker_default.trackEvent(TRACK_EVENTS.logoutFailed, TRACK_PAGES.auth, {
8571
+ a: resolveTrackAction2(TRACK_EVENTS.logoutFailed),
8387
8572
  reason: getTrackErrorReason(e)
8388
8573
  });
8389
8574
  console.log(import_chalk13.default.red(`Failed to logout: ${(e == null ? void 0 : e.message) || e}`));
@@ -8397,6 +8582,10 @@ function showAppKeyCmd() {
8397
8582
  try {
8398
8583
  const auth = getAuthConfig();
8399
8584
  if (!auth) {
8585
+ void tracker_default.trackEvent(TRACK_EVENTS.appKeyShownFailed, TRACK_PAGES.auth, {
8586
+ a: resolveTrackAction2(TRACK_EVENTS.appKeyShownFailed),
8587
+ reason: "no_appkey_found"
8588
+ });
8400
8589
  console.log(import_chalk14.default.yellow("No AppKey found. Please set your AppKey first."));
8401
8590
  console.log(import_chalk14.default.gray("Run: pinme set-appkey <AppKey>"));
8402
8591
  return;
@@ -8417,7 +8606,15 @@ function showAppKeyCmd() {
8417
8606
  } else {
8418
8607
  console.log(import_chalk14.default.cyan(` AppKey: ${"*".repeat(combined.length)}`));
8419
8608
  }
8609
+ void tracker_default.trackEvent(TRACK_EVENTS.appKeyShownSuccess, TRACK_PAGES.auth, {
8610
+ a: resolveTrackAction2(TRACK_EVENTS.appKeyShownSuccess),
8611
+ has_token_address: Boolean(auth.address)
8612
+ });
8420
8613
  } catch (e) {
8614
+ void tracker_default.trackEvent(TRACK_EVENTS.appKeyShownFailed, TRACK_PAGES.auth, {
8615
+ a: resolveTrackAction2(TRACK_EVENTS.appKeyShownFailed),
8616
+ reason: getTrackErrorReason(e)
8617
+ });
8421
8618
  console.log(import_chalk14.default.red(`Failed to show AppKey: ${(e == null ? void 0 : e.message) || e}`));
8422
8619
  }
8423
8620
  }
@@ -8431,6 +8628,7 @@ async function myDomainsCmd() {
8431
8628
  try {
8432
8629
  const list = await getMyDomains();
8433
8630
  void tracker_default.trackEvent(TRACK_EVENTS.myDomainsSuccess, TRACK_PAGES.domain, {
8631
+ a: resolveTrackAction2(TRACK_EVENTS.myDomainsSuccess),
8434
8632
  domain_count: list.length
8435
8633
  });
8436
8634
  if (!list.length) {
@@ -8453,6 +8651,7 @@ async function myDomainsCmd() {
8453
8651
  });
8454
8652
  } catch (e) {
8455
8653
  void tracker_default.trackEvent(TRACK_EVENTS.myDomainsFailed, TRACK_PAGES.domain, {
8654
+ a: resolveTrackAction2(TRACK_EVENTS.myDomainsFailed),
8456
8655
  reason: getTrackErrorReason(e)
8457
8656
  });
8458
8657
  printCliError(e, "Failed to fetch domains.");
@@ -8477,12 +8676,14 @@ async function walletBalanceCmd() {
8477
8676
  const balance = Number(((_a2 = result.data) == null ? void 0 : _a2.wallet_balance_usd) ?? 0);
8478
8677
  if (!Number.isFinite(balance)) {
8479
8678
  void tracker_default.trackEvent(TRACK_EVENTS.walletBalanceFailed, TRACK_PAGES.wallet, {
8679
+ a: resolveTrackAction2(TRACK_EVENTS.walletBalanceFailed),
8480
8680
  reason: "invalid_balance_value"
8481
8681
  });
8482
8682
  console.log(import_chalk16.default.red("Failed to parse wallet balance."));
8483
8683
  return;
8484
8684
  }
8485
8685
  void tracker_default.trackEvent(TRACK_EVENTS.walletBalanceSuccess, TRACK_PAGES.wallet, {
8686
+ a: resolveTrackAction2(TRACK_EVENTS.walletBalanceSuccess),
8486
8687
  has_balance: balance > 0,
8487
8688
  balance_usd: balance.toFixed(2)
8488
8689
  });
@@ -8494,6 +8695,7 @@ async function walletBalanceCmd() {
8494
8695
  }
8495
8696
  } catch (e) {
8496
8697
  void tracker_default.trackEvent(TRACK_EVENTS.walletBalanceFailed, TRACK_PAGES.wallet, {
8698
+ a: resolveTrackAction2(TRACK_EVENTS.walletBalanceFailed),
8497
8699
  reason: getTrackErrorReason(e)
8498
8700
  });
8499
8701
  printCliError(e, "Failed to fetch wallet balance.");
@@ -8636,6 +8838,7 @@ async function bindCmd() {
8636
8838
  const up = await uploadPath(absolutePath, { uid: authConfig.address });
8637
8839
  if (!(up == null ? void 0 : up.contentHash)) {
8638
8840
  void tracker_default.trackEvent(TRACK_EVENTS.uploadFailed, TRACK_PAGES.upload, {
8841
+ a: resolveTrackAction2(TRACK_EVENTS.uploadFailed),
8639
8842
  path_kind: pathKind,
8640
8843
  has_domain: true,
8641
8844
  reason: "no_content_hash"
@@ -8644,6 +8847,7 @@ async function bindCmd() {
8644
8847
  return;
8645
8848
  }
8646
8849
  void tracker_default.trackEvent(TRACK_EVENTS.uploadSuccess, TRACK_PAGES.upload, {
8850
+ a: resolveTrackAction2(TRACK_EVENTS.uploadSuccess),
8647
8851
  path_kind: pathKind,
8648
8852
  has_domain: true
8649
8853
  });
@@ -8659,6 +8863,7 @@ async function bindCmd() {
8659
8863
  );
8660
8864
  if (dnsResult.code !== 200) {
8661
8865
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindFailed, TRACK_PAGES.domain, {
8866
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindFailed),
8662
8867
  domain_type: domainType,
8663
8868
  domain_name: displayDomain,
8664
8869
  bind_source: "bind",
@@ -8668,6 +8873,7 @@ async function bindCmd() {
8668
8873
  return;
8669
8874
  }
8670
8875
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindSuccess, TRACK_PAGES.domain, {
8876
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindSuccess),
8671
8877
  domain_type: domainType,
8672
8878
  domain_name: displayDomain,
8673
8879
  bind_source: "bind"
@@ -8684,6 +8890,7 @@ async function bindCmd() {
8684
8890
  const ok = await bindPinmeDomain(displayDomain, up.contentHash);
8685
8891
  if (!ok) {
8686
8892
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindFailed, TRACK_PAGES.domain, {
8893
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindFailed),
8687
8894
  domain_type: domainType,
8688
8895
  domain_name: displayDomain,
8689
8896
  bind_source: "bind",
@@ -8693,6 +8900,7 @@ async function bindCmd() {
8693
8900
  return;
8694
8901
  }
8695
8902
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindSuccess, TRACK_PAGES.domain, {
8903
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindSuccess),
8696
8904
  domain_type: domainType,
8697
8905
  domain_name: displayDomain,
8698
8906
  bind_source: "bind"
@@ -8711,6 +8919,7 @@ async function bindCmd() {
8711
8919
  }
8712
8920
  } catch (e) {
8713
8921
  void tracker_default.trackEvent(TRACK_EVENTS.domainBindFailed, TRACK_PAGES.domain, {
8922
+ a: resolveTrackAction2(TRACK_EVENTS.domainBindFailed),
8714
8923
  bind_source: "bind",
8715
8924
  reason: getTrackErrorReason(e)
8716
8925
  });
@@ -8752,6 +8961,7 @@ async function loginCmd(options = {}) {
8752
8961
  console.log(import_chalk18.default.green("History merged to your account"));
8753
8962
  }
8754
8963
  void tracker_default.trackEvent(TRACK_EVENTS.cliLoginSuccess, TRACK_PAGES.login, {
8964
+ a: resolveTrackAction2(TRACK_EVENTS.cliLoginSuccess),
8755
8965
  env,
8756
8966
  has_token_address: true,
8757
8967
  merged_anonymous_history: ok
@@ -8759,6 +8969,7 @@ async function loginCmd(options = {}) {
8759
8969
  process.exit(0);
8760
8970
  } catch (e) {
8761
8971
  void tracker_default.trackEvent(TRACK_EVENTS.cliLoginFailed, TRACK_PAGES.login, {
8972
+ a: resolveTrackAction2(TRACK_EVENTS.cliLoginFailed),
8762
8973
  env,
8763
8974
  reason: getTrackErrorReason(e)
8764
8975
  });
@@ -9266,6 +9477,7 @@ Next steps:`));
9266
9477
  TRACK_EVENTS.projectCreateSuccess,
9267
9478
  TRACK_PAGES.project,
9268
9479
  {
9480
+ a: resolveTrackAction2(TRACK_EVENTS.projectCreateSuccess),
9269
9481
  project_name: workerData.project_name,
9270
9482
  template_branch: TEMPLATE_BRANCH,
9271
9483
  force: Boolean(options.force)
@@ -9277,6 +9489,7 @@ Next steps:`));
9277
9489
  TRACK_EVENTS.projectCreateFailed,
9278
9490
  TRACK_PAGES.project,
9279
9491
  {
9492
+ a: resolveTrackAction2(TRACK_EVENTS.projectCreateFailed),
9280
9493
  project_name: options.name,
9281
9494
  template_branch: TEMPLATE_BRANCH,
9282
9495
  force: Boolean(options.force),
@@ -9616,6 +9829,7 @@ async function saveCmd(options) {
9616
9829
  );
9617
9830
  console.log(import_chalk21.default.green("\nDeployment complete."));
9618
9831
  void tracker_default.trackEvent(TRACK_EVENTS.projectSaveSuccess, TRACK_PAGES.deploy, {
9832
+ a: resolveTrackAction2(TRACK_EVENTS.projectSaveSuccess),
9619
9833
  project_name: projectName,
9620
9834
  has_domain: Boolean(options.domain),
9621
9835
  domain_type: options.domain ? isDnsDomain(options.domain) ? "dns" : "pinme_subdomain" : void 0
@@ -9623,6 +9837,7 @@ async function saveCmd(options) {
9623
9837
  process.exit(0);
9624
9838
  } catch (error) {
9625
9839
  void tracker_default.trackEvent(TRACK_EVENTS.projectSaveFailed, TRACK_PAGES.deploy, {
9840
+ a: resolveTrackAction2(TRACK_EVENTS.projectSaveFailed),
9626
9841
  project_name: options.projectName || options.name,
9627
9842
  has_domain: Boolean(options.domain),
9628
9843
  reason: getTrackErrorReason(error)
@@ -9758,8 +9973,26 @@ async function updateDbCmd(options) {
9758
9973
  console.log(import_chalk22.default.gray(`Found ${sqlFiles.length} SQL file(s) in db`));
9759
9974
  await updateDb(sqlFiles, projectName);
9760
9975
  console.log(import_chalk22.default.green("\nDatabase update complete."));
9976
+ void tracker_default.trackEvent(
9977
+ TRACK_EVENTS.projectUpdateDbSuccess,
9978
+ TRACK_PAGES.deploy,
9979
+ {
9980
+ a: resolveTrackAction2(TRACK_EVENTS.projectUpdateDbSuccess),
9981
+ project_name: projectName,
9982
+ sql_file_count: sqlFiles.length
9983
+ }
9984
+ );
9761
9985
  process.exit(0);
9762
9986
  } catch (error) {
9987
+ void tracker_default.trackEvent(
9988
+ TRACK_EVENTS.projectUpdateDbFailed,
9989
+ TRACK_PAGES.deploy,
9990
+ {
9991
+ a: resolveTrackAction2(TRACK_EVENTS.projectUpdateDbFailed),
9992
+ project_name: (options == null ? void 0 : options.projectName) || (options == null ? void 0 : options.name),
9993
+ reason: getTrackErrorReason(error)
9994
+ }
9995
+ );
9763
9996
  printCliError(error, "Database update failed.");
9764
9997
  process.exit(1);
9765
9998
  }
@@ -9942,8 +10175,26 @@ async function updateWorkerCmd(options) {
9942
10175
  console.log(import_chalk23.default.gray(`SQL files: ignored (not processed for update_worker)`));
9943
10176
  await updateWorker(workerJsPath, modulePaths, metadata, projectName);
9944
10177
  console.log(import_chalk23.default.green("\nWorker update complete."));
10178
+ void tracker_default.trackEvent(
10179
+ TRACK_EVENTS.projectUpdateWorkerSuccess,
10180
+ TRACK_PAGES.deploy,
10181
+ {
10182
+ a: resolveTrackAction2(TRACK_EVENTS.projectUpdateWorkerSuccess),
10183
+ project_name: projectName,
10184
+ module_count: modulePaths.length
10185
+ }
10186
+ );
9945
10187
  process.exit(0);
9946
10188
  } catch (error) {
10189
+ void tracker_default.trackEvent(
10190
+ TRACK_EVENTS.projectUpdateWorkerFailed,
10191
+ TRACK_PAGES.deploy,
10192
+ {
10193
+ a: resolveTrackAction2(TRACK_EVENTS.projectUpdateWorkerFailed),
10194
+ project_name: (options == null ? void 0 : options.projectName) || (options == null ? void 0 : options.name),
10195
+ reason: getTrackErrorReason(error)
10196
+ }
10197
+ );
9947
10198
  printCliError(error, "Worker update failed.");
9948
10199
  process.exit(1);
9949
10200
  }
@@ -10040,6 +10291,7 @@ async function updateWebCmd(options) {
10040
10291
  TRACK_EVENTS.projectUpdateWebSuccess,
10041
10292
  TRACK_PAGES.deploy,
10042
10293
  {
10294
+ a: resolveTrackAction2(TRACK_EVENTS.projectUpdateWebSuccess),
10043
10295
  project_name: projectName
10044
10296
  }
10045
10297
  );
@@ -10049,6 +10301,7 @@ async function updateWebCmd(options) {
10049
10301
  TRACK_EVENTS.projectUpdateWebFailed,
10050
10302
  TRACK_PAGES.deploy,
10051
10303
  {
10304
+ a: resolveTrackAction2(TRACK_EVENTS.projectUpdateWebFailed),
10052
10305
  project_name: (options == null ? void 0 : options.projectName) || (options == null ? void 0 : options.name),
10053
10306
  reason: getTrackErrorReason(error)
10054
10307
  }
@@ -10138,6 +10391,7 @@ async function deleteCmd(options) {
10138
10391
  TRACK_EVENTS.projectDeleteSuccess,
10139
10392
  TRACK_PAGES.project,
10140
10393
  {
10394
+ a: resolveTrackAction2(TRACK_EVENTS.projectDeleteSuccess),
10141
10395
  project_name: data.data.project_name,
10142
10396
  domain_deleted: Boolean(data.data.domain_deleted),
10143
10397
  worker_deleted: Boolean(data.data.worker_deleted),
@@ -10161,6 +10415,7 @@ Project: ${data.data.project_name}`));
10161
10415
  TRACK_EVENTS.projectDeleteFailed,
10162
10416
  TRACK_PAGES.project,
10163
10417
  {
10418
+ a: resolveTrackAction2(TRACK_EVENTS.projectDeleteFailed),
10164
10419
  project_name: options.name || getProjectName() || void 0,
10165
10420
  force: Boolean(options.force),
10166
10421
  reason: getTrackErrorReason(error)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinme",
3
- "version": "2.0.5-beta.1",
3
+ "version": "2.0.5",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },