@lumiapassport/ui-kit 1.14.20 → 1.14.22
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/dist/iframe/index.html +1 -1
- package/dist/iframe/main.js +118 -1
- package/dist/iframe/main.js.map +1 -1
- package/dist/index.cjs +457 -403
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +462 -408
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/iframe/index.html
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<meta http-equiv="X-Content-Type-Options" content="nosniff" />
|
|
16
16
|
<meta http-equiv="Referrer-Policy" content="strict-origin-when-cross-origin" />
|
|
17
17
|
|
|
18
|
-
<title>Lumia Passport Secure Wallet - iframe version 1.14.
|
|
18
|
+
<title>Lumia Passport Secure Wallet - iframe version 1.14.22</title>
|
|
19
19
|
|
|
20
20
|
<!-- Styles will be injected by build process -->
|
|
21
21
|
<style>
|
package/dist/iframe/main.js
CHANGED
|
@@ -1570,6 +1570,12 @@ var AuthorizationManager = class {
|
|
|
1570
1570
|
const metadata = await this.fetchProjectMetadata(projectId);
|
|
1571
1571
|
return metadata?.trustedAuthorizedApp === true;
|
|
1572
1572
|
}
|
|
1573
|
+
/**
|
|
1574
|
+
* Get project metadata (name, logo, etc.) - uses cache
|
|
1575
|
+
*/
|
|
1576
|
+
async getProjectMetadata(projectId) {
|
|
1577
|
+
return this.fetchProjectMetadata(projectId);
|
|
1578
|
+
}
|
|
1573
1579
|
/**
|
|
1574
1580
|
* Fetch project metadata from public API (with caching)
|
|
1575
1581
|
*/
|
|
@@ -3874,6 +3880,84 @@ var TrustedAppsManager = class {
|
|
|
3874
3880
|
}
|
|
3875
3881
|
};
|
|
3876
3882
|
|
|
3883
|
+
// src/iframe/lib/opted-out-apps-manager.ts
|
|
3884
|
+
var STORAGE_KEY2 = "lumia_passport_opted_out_apps";
|
|
3885
|
+
var OptedOutAppsManager = class {
|
|
3886
|
+
/**
|
|
3887
|
+
* Check if user has opted out of auto-trust for this app
|
|
3888
|
+
*/
|
|
3889
|
+
isOptedOut(userId, projectId, origin) {
|
|
3890
|
+
const optedOutApps = this.getOptedOutApps();
|
|
3891
|
+
const result = optedOutApps.some(
|
|
3892
|
+
(app) => app.userId === userId && app.projectId === projectId && app.origin === origin
|
|
3893
|
+
);
|
|
3894
|
+
return result;
|
|
3895
|
+
}
|
|
3896
|
+
/**
|
|
3897
|
+
* Add app to opted-out list (when user removes ecosystem app from trusted list)
|
|
3898
|
+
*/
|
|
3899
|
+
addOptedOut(userId, projectId, origin) {
|
|
3900
|
+
const optedOutApps = this.getOptedOutApps();
|
|
3901
|
+
const exists = optedOutApps.some(
|
|
3902
|
+
(app) => app.userId === userId && app.projectId === projectId && app.origin === origin
|
|
3903
|
+
);
|
|
3904
|
+
if (exists) {
|
|
3905
|
+
return;
|
|
3906
|
+
}
|
|
3907
|
+
optedOutApps.push({
|
|
3908
|
+
userId,
|
|
3909
|
+
projectId,
|
|
3910
|
+
origin,
|
|
3911
|
+
optedOutAt: Date.now()
|
|
3912
|
+
});
|
|
3913
|
+
this.saveOptedOutApps(optedOutApps);
|
|
3914
|
+
}
|
|
3915
|
+
/**
|
|
3916
|
+
* Remove app from opted-out list (when user manually re-trusts via checkbox)
|
|
3917
|
+
*/
|
|
3918
|
+
removeOptedOut(userId, projectId, origin) {
|
|
3919
|
+
const optedOutApps = this.getOptedOutApps();
|
|
3920
|
+
const filtered = optedOutApps.filter(
|
|
3921
|
+
(app) => !(app.userId === userId && app.projectId === projectId && app.origin === origin)
|
|
3922
|
+
);
|
|
3923
|
+
this.saveOptedOutApps(filtered);
|
|
3924
|
+
}
|
|
3925
|
+
/**
|
|
3926
|
+
* Clear all opted-out apps for a user (when clearing all trusted apps)
|
|
3927
|
+
*/
|
|
3928
|
+
clearOptedOutForUser(userId) {
|
|
3929
|
+
const optedOutApps = this.getOptedOutApps();
|
|
3930
|
+
const filtered = optedOutApps.filter((app) => app.userId !== userId);
|
|
3931
|
+
this.saveOptedOutApps(filtered);
|
|
3932
|
+
}
|
|
3933
|
+
/**
|
|
3934
|
+
* Get all opted-out apps from storage
|
|
3935
|
+
*/
|
|
3936
|
+
getOptedOutApps() {
|
|
3937
|
+
try {
|
|
3938
|
+
const data = localStorage.getItem(STORAGE_KEY2);
|
|
3939
|
+
if (!data) {
|
|
3940
|
+
return [];
|
|
3941
|
+
}
|
|
3942
|
+
const apps = JSON.parse(data);
|
|
3943
|
+
return Array.isArray(apps) ? apps : [];
|
|
3944
|
+
} catch (error) {
|
|
3945
|
+
console.error("[OptedOutApps] Error reading opted-out apps:", error);
|
|
3946
|
+
return [];
|
|
3947
|
+
}
|
|
3948
|
+
}
|
|
3949
|
+
/**
|
|
3950
|
+
* Save opted-out apps to storage
|
|
3951
|
+
*/
|
|
3952
|
+
saveOptedOutApps(apps) {
|
|
3953
|
+
try {
|
|
3954
|
+
localStorage.setItem(STORAGE_KEY2, JSON.stringify(apps));
|
|
3955
|
+
} catch (error) {
|
|
3956
|
+
console.error("[OptedOutApps] Error saving opted-out apps:", error);
|
|
3957
|
+
}
|
|
3958
|
+
}
|
|
3959
|
+
};
|
|
3960
|
+
|
|
3877
3961
|
// src/iframe/lib/signing-manager.ts
|
|
3878
3962
|
var SigningManager = class extends TokenRefreshApiClient {
|
|
3879
3963
|
constructor() {
|
|
@@ -3886,6 +3970,7 @@ var SigningManager = class extends TokenRefreshApiClient {
|
|
|
3886
3970
|
this.metadataCache = /* @__PURE__ */ new Map();
|
|
3887
3971
|
this.storage = new StorageManager();
|
|
3888
3972
|
this.trustedApps = new TrustedAppsManager();
|
|
3973
|
+
this.optedOutApps = new OptedOutAppsManager();
|
|
3889
3974
|
}
|
|
3890
3975
|
/**
|
|
3891
3976
|
* Initialize WASM module
|
|
@@ -3993,6 +4078,7 @@ var SigningManager = class extends TokenRefreshApiClient {
|
|
|
3993
4078
|
}
|
|
3994
4079
|
if (confirmResult.trustApp) {
|
|
3995
4080
|
this.trustedApps.addTrustedApp(userId, projectId, origin, confirmResult.appName, confirmResult.appLogo);
|
|
4081
|
+
this.optedOutApps.removeOptedOut(userId, projectId, origin);
|
|
3996
4082
|
}
|
|
3997
4083
|
} else if (isMinimalOperation) {
|
|
3998
4084
|
console.log("[iframe][Sign] Auto-approving minimal safe operation (account deployment)");
|
|
@@ -4241,6 +4327,7 @@ var SigningManager = class extends TokenRefreshApiClient {
|
|
|
4241
4327
|
}
|
|
4242
4328
|
if (confirmResult.trustApp) {
|
|
4243
4329
|
this.trustedApps.addTrustedApp(userId, projectId, origin, confirmResult.appName, confirmResult.appLogo);
|
|
4330
|
+
this.optedOutApps.removeOptedOut(userId, projectId, origin);
|
|
4244
4331
|
}
|
|
4245
4332
|
}
|
|
4246
4333
|
const keyshareData = this.storage.loadKeyshare(userId);
|
|
@@ -4315,7 +4402,7 @@ var SigningManager = class extends TokenRefreshApiClient {
|
|
|
4315
4402
|
};
|
|
4316
4403
|
|
|
4317
4404
|
// src/iframe/main.ts
|
|
4318
|
-
var IFRAME_VERSION = "1.14.
|
|
4405
|
+
var IFRAME_VERSION = "1.14.22";
|
|
4319
4406
|
var IframeWallet = class {
|
|
4320
4407
|
constructor() {
|
|
4321
4408
|
console.log("=".repeat(60));
|
|
@@ -4328,6 +4415,7 @@ var IframeWallet = class {
|
|
|
4328
4415
|
this.authManager = new AuthorizationManager();
|
|
4329
4416
|
this.storage = new StorageManager();
|
|
4330
4417
|
this.trustedApps = new TrustedAppsManager();
|
|
4418
|
+
this.optedOutApps = new OptedOutAppsManager();
|
|
4331
4419
|
this.backupManager = new BackupManager();
|
|
4332
4420
|
this.binance = new BinanceOnrampAPI(this.messenger.sendResponse.bind(this.messenger));
|
|
4333
4421
|
this.rampnow = new RampnowOnrampAPI(this.messenger.sendResponse.bind(this.messenger));
|
|
@@ -4454,6 +4542,26 @@ var IframeWallet = class {
|
|
|
4454
4542
|
console.log(`[iframe] Project ${projectId} is a trusted authorized app, auto-authorizing`);
|
|
4455
4543
|
await this.authManager.storeAuthorization(userId, projectId, origin);
|
|
4456
4544
|
console.log(`[iframe] \u2705 Auto-authorization granted for trusted app: ${userId} -> ${projectId}`);
|
|
4545
|
+
try {
|
|
4546
|
+
const isOptedOut = this.optedOutApps.isOptedOut(userId, projectId, origin);
|
|
4547
|
+
console.log(`[iframe] Checking opt-out status: ${isOptedOut}`);
|
|
4548
|
+
if (!isOptedOut) {
|
|
4549
|
+
const metadata = await this.authManager.getProjectMetadata(projectId);
|
|
4550
|
+
console.log(`[iframe] Got metadata for auto-trust:`, metadata?.name, metadata?.logo);
|
|
4551
|
+
this.trustedApps.addTrustedApp(
|
|
4552
|
+
userId,
|
|
4553
|
+
projectId,
|
|
4554
|
+
origin,
|
|
4555
|
+
metadata?.name,
|
|
4556
|
+
metadata?.logo
|
|
4557
|
+
);
|
|
4558
|
+
console.log(`[iframe] \u2705 Auto-added to trusted apps list for seamless transactions`);
|
|
4559
|
+
} else {
|
|
4560
|
+
console.log(`[iframe] \u2139\uFE0F User opted-out of auto-trust for this app, skipping`);
|
|
4561
|
+
}
|
|
4562
|
+
} catch (error) {
|
|
4563
|
+
console.error(`[iframe] \u274C Error adding to trusted apps list:`, error);
|
|
4564
|
+
}
|
|
4457
4565
|
} else {
|
|
4458
4566
|
console.log(`[iframe] Authorization needed for project: ${projectId}`);
|
|
4459
4567
|
const projectInfo = {
|
|
@@ -4650,6 +4758,15 @@ var IframeWallet = class {
|
|
|
4650
4758
|
console.error("[iframe] REMOVE_TRUSTED_APP: Session validation failed");
|
|
4651
4759
|
throw new Error("Invalid session");
|
|
4652
4760
|
}
|
|
4761
|
+
const isEcosystemApp = await this.authManager.isTrustedAuthorizedApp(projectId);
|
|
4762
|
+
if (isEcosystemApp) {
|
|
4763
|
+
try {
|
|
4764
|
+
this.optedOutApps.addOptedOut(userId, projectId, appOrigin);
|
|
4765
|
+
console.log(`[iframe] \u2139\uFE0F Ecosystem app removed - added to opted-out list`);
|
|
4766
|
+
} catch (e) {
|
|
4767
|
+
console.error("[iframe] Failed to persist opted-out flag; proceeding with removal:", e);
|
|
4768
|
+
}
|
|
4769
|
+
}
|
|
4653
4770
|
this.trustedApps.removeTrustedApp(userId, projectId, appOrigin);
|
|
4654
4771
|
this.messenger.sendResponse(
|
|
4655
4772
|
messageId,
|