Skip to content

Commit 68bb2fb

Browse files
committed
deploy: 606b7d0
1 parent a1a20b5 commit 68bb2fb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+908
-238
lines changed

appConfig.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ window.AppConfig = {
3131
"app_notification_url": "assets/notifications/dev/",
3232
"app_update_url": "https://updates.phcode.io/tauri/update-latest-experimental-build.json",
3333
"linting.enabled_by_default": true,
34-
"build_timestamp": "2025-09-18T09:23:59.718Z",
34+
"build_timestamp": "2025-09-18T12:53:22.369Z",
3535
"googleAnalyticsID": "G-P4HJFPDB76",
3636
"googleAnalyticsIDDesktop": "G-VE5BXWJ0HF",
3737
"mixPanelID": "49c4d164b592be2350fc7af06a259bf3",
@@ -43,7 +43,7 @@ window.AppConfig = {
4343
"bugsnagEnv": "development"
4444
},
4545
"name": "Phoenix Code",
46-
"version": "4.1.2-21475",
46+
"version": "4.1.2-21478",
4747
"apiVersion": "4.1.2",
4848
"homepage": "https://core.ai",
4949
"issues": {

assets/default-project/en.zip

0 Bytes
Binary file not shown.

assets/sample-projects/HTML5.zip

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

assets/sample-projects/explore.zip

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

brackets-min.js

Lines changed: 70 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -112671,7 +112671,8 @@ define("nls/root/strings", {
112671112671
"PROMO_GET_APP_UPSELL_BUTTON": "Get {0}",
112672112672
"PROMO_PRO_ENDED_TITLE": "Your {0} Trial has ended",
112673112673
"PROMO_PRO_TRIAL_DAYS_LEFT": "Phoenix Pro Trial ({0} days left)",
112674-
"GET_PHOENIX_PRO": "Get Phoenix Pro"
112674+
"GET_PHOENIX_PRO": "Get Phoenix Pro",
112675+
"USER_FREE_PLAN_NAME": "Free Plan"
112675112676
});
112676112677

112677112678
/*
@@ -167452,12 +167453,14 @@ define("services/login-desktop", function (require, exports, module) {
167452167453
define("services/login-service", function (require, exports, module) {
167453167454
require("./setup-login-service"); // this adds loginService to KernalModeTrust
167454167455
require("./promotions");
167456+
require("./login-utils");
167455167457

167456-
const Metrics = require("utils/Metrics");
167457-
const LoginUtils = require("./login-utils");
167458+
const Metrics = require("utils/Metrics"),
167459+
Strings = require("strings");
167458167460

167459167461
const MS_IN_DAY = 10 * 24 * 60 * 60 * 1000;
167460167462
const TEN_MINUTES = 10 * 60 * 1000;
167463+
const FREE_PLAN_VALIDITY_DAYS = 10000;
167461167464

167462167465
// the fallback salt is always a constant as this will only fail in rare circumstatnces and it needs to
167463167466
// be exactly same across versions of the app. Changing this will not affect the large majority of users and
@@ -167472,6 +167475,7 @@ define("services/login-service", function (require, exports, module) {
167472167475

167473167476
// save a copy of window.fetch so that extensions wont tamper with it.
167474167477
let fetchFn = window.fetch;
167478+
let dateNowFn = Date.now;
167475167479

167476167480
const KernalModeTrust = window.KernalModeTrust;
167477167481
if(!KernalModeTrust){
@@ -167775,8 +167779,8 @@ define("services/login-service", function (require, exports, module) {
167775167779
const current = await getEffectiveEntitlements(false); // Get effective entitlements
167776167780

167777167781
// Check if we need to refresh
167778-
const expiredPlanName = LoginUtils.validTillExpired(current, lastRecordedState);
167779-
const hasChanged = LoginUtils.haveEntitlementsChanged(current, lastRecordedState);
167782+
const expiredPlanName = KernalModeTrust.LoginUtils.validTillExpired(current, lastRecordedState);
167783+
const hasChanged = KernalModeTrust.LoginUtils.haveEntitlementsChanged(current, lastRecordedState);
167780167784

167781167785
if (expiredPlanName || hasChanged) {
167782167786
console.log(`Entitlements monitor detected changes, Expired: ${expiredPlanName},` +
@@ -167800,6 +167804,38 @@ define("services/login-service", function (require, exports, module) {
167800167804
console.log('Entitlements monitor started (10-minute interval)');
167801167805
}
167802167806

167807+
function _validateAndFilterEntitlements(entitlements) {
167808+
if (!entitlements) {
167809+
return;
167810+
}
167811+
167812+
const currentDate = dateNowFn();
167813+
167814+
if(entitlements.plan && (!entitlements.plan.validTill || currentDate > entitlements.plan.validTill)) {
167815+
entitlements.plan = {
167816+
...entitlements.plan,
167817+
paidSubscriber: false,
167818+
name: Strings.USER_FREE_PLAN_NAME,
167819+
validTill: currentDate + (FREE_PLAN_VALIDITY_DAYS * MS_IN_DAY)
167820+
};
167821+
}
167822+
167823+
const featureEntitlements = entitlements.entitlements;
167824+
if (!featureEntitlements) {
167825+
return;
167826+
}
167827+
167828+
for(const featureName in featureEntitlements) {
167829+
const feature = featureEntitlements[featureName];
167830+
if(feature && (!feature.validTill || currentDate > feature.validTill)) {
167831+
feature.activated = false;
167832+
feature.upgradeToPlan = feature.upgradeToPlan || brackets.config.main_pro_plan;
167833+
feature.subscribeURL = feature.subscribeURL || brackets.config.purchase_url;
167834+
feature.validTill = feature.validTill || (currentDate - MS_IN_DAY);
167835+
}
167836+
}
167837+
}
167838+
167803167839
/**
167804167840
* Get effective entitlements for determining feature availability throughout the app.
167805167841
* This is the primary API that should be used across Phoenix to check entitlements and enable/disable features.
@@ -167891,6 +167927,7 @@ define("services/login-service", function (require, exports, module) {
167891167927
async function getEffectiveEntitlements(forceRefresh = false) {
167892167928
// Get raw server entitlements
167893167929
const serverEntitlements = await getEntitlements(forceRefresh);
167930+
_validateAndFilterEntitlements(serverEntitlements); // will prune invalid entitlements
167894167931

167895167932
// Get trial days remaining
167896167933
const trialDaysRemaining = await LoginService.getProTrialDaysRemaining();
@@ -167905,19 +167942,17 @@ define("services/login-service", function (require, exports, module) {
167905167942
// Logged-in user with trial
167906167943
if (serverEntitlements.plan.paidSubscriber) {
167907167944
// Already a paid subscriber, return as-is
167908-
// todo we need to check and filter valid till for each fields that we are interested in.
167909167945
return serverEntitlements;
167910167946
}
167911167947
// Enhance entitlements for trial user
167912-
// todo we need to prune and filter serverEntitlements valid till for each fields that we are interested in.
167913167948
// ie if any entitlement has valid till expired, we need to deactivate that entitlement
167914167949
return {
167915167950
...serverEntitlements,
167916167951
plan: {
167917167952
...serverEntitlements.plan,
167918167953
paidSubscriber: true,
167919167954
name: brackets.config.main_pro_plan,
167920-
validTill: Date.now() + trialDaysRemaining * MS_IN_DAY
167955+
validTill: dateNowFn() + trialDaysRemaining * MS_IN_DAY
167921167956
},
167922167957
isInProTrial: true,
167923167958
trialDaysRemaining: trialDaysRemaining,
@@ -167927,7 +167962,7 @@ define("services/login-service", function (require, exports, module) {
167927167962
activated: true,
167928167963
subscribeURL: brackets.config.purchase_url,
167929167964
upgradeToPlan: brackets.config.main_pro_plan,
167930-
validTill: Date.now() + trialDaysRemaining * MS_IN_DAY
167965+
validTill: dateNowFn() + trialDaysRemaining * MS_IN_DAY
167931167966
}
167932167967
}
167933167968
};
@@ -167938,7 +167973,7 @@ define("services/login-service", function (require, exports, module) {
167938167973
plan: {
167939167974
paidSubscriber: true,
167940167975
name: brackets.config.main_pro_plan,
167941-
validTill: Date.now() + trialDaysRemaining * MS_IN_DAY
167976+
validTill: dateNowFn() + trialDaysRemaining * MS_IN_DAY
167942167977
},
167943167978
isInProTrial: true,
167944167979
trialDaysRemaining: trialDaysRemaining,
@@ -167947,7 +167982,7 @@ define("services/login-service", function (require, exports, module) {
167947167982
activated: true,
167948167983
subscribeURL: brackets.config.purchase_url,
167949167984
upgradeToPlan: brackets.config.main_pro_plan,
167950-
validTill: Date.now() + trialDaysRemaining * MS_IN_DAY
167985+
validTill: dateNowFn() + trialDaysRemaining * MS_IN_DAY
167951167986
}
167952167987
}
167953167988
};
@@ -167966,7 +168001,11 @@ define("services/login-service", function (require, exports, module) {
167966168001
LoginService,
167967168002
setFetchFn: function _setFetchFn(fn) {
167968168003
fetchFn = fn;
167969-
}
168004+
},
168005+
setDateNowFn: function _setDdateNowFn(fn) {
168006+
dateNowFn = fn;
168007+
},
168008+
_validateAndFilterEntitlements: _validateAndFilterEntitlements
167970168009
};
167971168010
}
167972168011

@@ -168001,9 +168040,15 @@ define("services/login-service", function (require, exports, module) {
168001168040

168002168041
define("services/login-utils", function (require, exports, module) {
168003168042

168043+
const KernalModeTrust = window.KernalModeTrust;
168044+
if(!KernalModeTrust){
168045+
// integrated extensions will have access to kernal mode, but not external extensions
168046+
throw new Error("Login utils should have access to KernalModeTrust. Cannot boot without trust ring");
168047+
}
168048+
168004168049
/**
168005168050
* Check if any validTill time has expired
168006-
*
168051+
*
168007168052
* @param {Object|null} entitlements - Current entitlements object
168008168053
* @param {Object|null} lastRecordedEntitlement - Previously recorded entitlements
168009168054
* @returns {string|null} - Name of expired plan/entitlement or null if none expired
@@ -168061,7 +168106,7 @@ define("services/login-utils", function (require, exports, module) {
168061168106

168062168107
/**
168063168108
* Check if entitlements have changed from last recorded state
168064-
*
168109+
*
168065168110
* @param {Object|null} current - Current entitlements object
168066168111
* @param {Object|null} last - Last recorded entitlements object
168067168112
* @returns {boolean} - True if entitlements have changed, false otherwise
@@ -168105,10 +168150,17 @@ define("services/login-utils", function (require, exports, module) {
168105168150
return false;
168106168151
}
168107168152

168108-
// Export functions
168109-
exports.validTillExpired = validTillExpired;
168110-
exports.haveEntitlementsChanged = haveEntitlementsChanged;
168153+
KernalModeTrust.LoginUtils = {
168154+
validTillExpired,
168155+
haveEntitlementsChanged
168156+
};
168157+
// Test only Export functions
168158+
if(Phoenix.isTestWindow) {
168159+
exports.validTillExpired = validTillExpired;
168160+
exports.haveEntitlementsChanged = haveEntitlementsChanged;
168161+
}
168111168162
});
168163+
168112168164
/*
168113168165
* GNU AGPL-3.0 License
168114168166
*
@@ -168850,7 +168902,7 @@ define("services/profile-menu", function (require, exports, module) {
168850168902
initials: profileData.profileIcon.initials,
168851168903
avatarColor: profileData.profileIcon.color,
168852168904
planClass: "user-plan-free",
168853-
planName: "Free Plan",
168905+
planName: Strings.USER_FREE_PLAN_NAME,
168854168906
titleText: "Ai Quota Used",
168855168907
usageText: "100 / 200 credits",
168856168908
usedPercent: 0,

0 commit comments

Comments
 (0)