UNPKG

@trap_stevo/filetide

Version:

Revolutionizing real-time file transfer with seamless, instant communication across any device. Deliver files instantly, regardless of platform, and experience unparalleled speed and control in managing transfers. Elevate your file-sharing capabilities wi

150 lines (149 loc) 6.45 kB
"use strict"; const LogicTide = require("@trap_stevo/logictide"); const Lockline = require("@trap_stevo/lockline"); const axios = require("axios"); const { FileTideDebugUtilityManager, significantMessageColors, noticeMessageColors, infoMessageColors, infoAccentMessageColors, errorMessageColors } = require("./FileTideDebugUtilityManager.js"); const { displayFileTideAuthor, displayFileTideTitle, displayFileTideLogo } = require("./FileTideUniversalUtilityManager.js"); class TideTokenEnforcementManager { constructor(options = {}) { const { tideTokenEnforcementCallbackConfigurations = {}, onDidNotLoadRecentTideTokens } = options; this.tideTokenEnforcementCallbackConfigurations = tideTokenEnforcementCallbackConfigurations; this.tideTokenEnforcementComplianceHandlers = this.generateTideTokenEnforcementHandlers(); this.lock = new Lockline(); const lockboxPath = LogicTide.runSync("filetide-root-path") ? `${LogicTide.runSync("filetide-root-path")}/.lockbox` : "./lockbox"; this.lock.setStorage(Lockline.lockbox(lockboxPath, { namespace: "tide-tokens", encrypt: true })); this.lock.registerValidator("tide-token-authorization", async ({ key }) => { const fileTideAPIURL = await LogicTide.run("filetide-api-origin-url"); const response = await axios.get(`${fileTideAPIURL}/tide-token-auth/authorized-tide-token`, { params: { inputTideToken: key } }); return { valid: response.data.authorizedTideToken, raw: response.data.details, reason: response.data.message }; }); this.lock.setDefaultValidator("tide-token-authorization"); this.loadedRecentLicenseKeys = this.lock.loadRecentLicenseKeys().catch(error => { if (typeof onDidNotLoadRecentTideTokens === "function") { onDidNotLoadRecentTideTokens(error); } }); this.enforcerOverviewMetrics = { "tide-token-authorized": 0, "tide-token-blocked": 0, "tide-token-missing": 0, "tide-token-invalid": 0 }; } updateTideTokenEnforcementCallbackConfigurations(updatedConfigurations = {}) { this.tideTokenEnforcementCallbackConfigurations = { ...this.tideTokenEnforcementCallbackConfigurations, ...updatedConfigurations }; this.tideTokenEnforcementComplianceHandlers = this.generateTideTokenEnforcementHandlers(); } generateTideTokenEnforcementHandlers() { const { onLicenseBlocked, onMissingLicense, onInvalidLicense, onSuccess } = this.tideTokenEnforcementCallbackConfigurations; const url = "https://filetide.com/tider-portal"; return { onLicenseBlocked: enforcedDetails => { FileTideDebugUtilityManager.outputGradient(`[FileTide | ${new Date().toLocaleString()}] ~ ❌ TideToken Blocked\n`, errorMessageColors); FileTideDebugUtilityManager.outputGradient(`\t→ Visit ~ ${url} to configure / create TideTokens.\n`, infoAccentMessageColors); FileTideDebugUtilityManager.outputGradient(`| ${new Date().toLocaleString()} |`, infoAccentMessageColors); FileTideDebugUtilityManager.outputGradient(`${"-".repeat(130)}\n`, infoAccentMessageColors); this.enforcerOverviewMetrics["tide-token-blocked"] += 1; onLicenseBlocked?.(enforcedDetails); }, onMissingKey: enforcedDetails => { displayFileTideLogo(); displayFileTideTitle(); FileTideDebugUtilityManager.outputGradient(`[FileTide] ~ Welcome!\n`, significantMessageColors); FileTideDebugUtilityManager.outputGradient("\t~ No TideToken(s) Detected\n", significantMessageColors); FileTideDebugUtilityManager.outputGradient(`\t→ Visit ~ ${url} to create TideTokens.\n`, infoMessageColors); FileTideDebugUtilityManager.outputGradient(`| ${new Date().toLocaleString()} |`, infoAccentMessageColors); FileTideDebugUtilityManager.outputGradient(`${"-".repeat(130)}\n`, infoAccentMessageColors); this.enforcerOverviewMetrics["tide-token-missing"] += 1; onMissingLicense?.(enforcedDetails); }, onInvalidKey: enforcedDetails => { FileTideDebugUtilityManager.outputGradient(`[FileTide | ${new Date().toLocaleString()}] ~ ❌ TideToken Unauthorized\n`, errorMessageColors); FileTideDebugUtilityManager.outputGradient(`\t→ Visit ~ ${url} to configure / create TideTokens.\n`, infoAccentMessageColors); FileTideDebugUtilityManager.outputGradient(`| ${new Date().toLocaleString()} |`, infoAccentMessageColors); FileTideDebugUtilityManager.outputGradient(`${"-".repeat(130)}\n`, infoAccentMessageColors); this.enforcerOverviewMetrics["tide-token-invalid"] += 1; onInvalidLicense?.(enforcedDetails); }, onSuccess: enforcedDetails => { FileTideDebugUtilityManager.outputGradient(`[FileTide | ${new Date().toLocaleString()}] ~ ✅ TideToken Authorized\n`, significantMessageColors); if (this.enforcerOverviewMetrics["tide-token-authorized"] <= 0) { FileTideDebugUtilityManager.outputGradient(`\t→ Configure TideTokens at ${url}\n`, noticeMessageColors); } FileTideDebugUtilityManager.outputGradient(`| ${new Date().toLocaleString()} |`, infoAccentMessageColors); FileTideDebugUtilityManager.outputGradient(`${"-".repeat(130)}\n`, infoAccentMessageColors); this.enforcerOverviewMetrics["tide-token-authorized"] += 1; onSuccess?.(enforcedDetails); } }; } protect(handler, scope, options = {}) { return async (...args) => { await this.loadedRecentLicenseKeys; const protectedHandler = this.lock.withLicenseProtection(handler, scope, { ...(options ?? {}), ...this.tideTokenEnforcementComplianceHandlers }); return await protectedHandler(...args); }; } getKey(scope = "default") { return this.lock.getCurrentLicenseKey(scope); } async seal(key, meta = {}) { return await this.lock.sealKey(key, { validators: [{ name: "tide-token-authorization" }], meta }, { assumePreviouslyValid: true, fallbackIfOffline: true, autoRemoveExpired: true, storeInvalid: false }); } async validate(key) { return await this.lock.validate(key); } async inspect(key) { return await this.lock.inspectKey(key); } } ; module.exports = new TideTokenEnforcementManager();