@ownables/platform-browser 0.1.0 → 0.5.1
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/README.md +42 -0
- package/dist/core/src/index.d.ts +21 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/index.js +20 -0
- package/dist/core/src/index.js.map +1 -0
- package/dist/core/src/interfaces/core.d.ts +53 -0
- package/dist/core/src/interfaces/core.d.ts.map +1 -0
- package/dist/core/src/interfaces/core.js +2 -0
- package/dist/core/src/interfaces/core.js.map +1 -0
- package/dist/core/src/logger.d.ts +3 -0
- package/dist/core/src/logger.d.ts.map +1 -0
- package/dist/core/src/logger.js +2 -0
- package/dist/core/src/logger.js.map +1 -0
- package/dist/core/src/ownableErrorMessage.d.ts +2 -0
- package/dist/core/src/ownableErrorMessage.d.ts.map +1 -0
- package/dist/core/src/ownableErrorMessage.js +20 -0
- package/dist/core/src/ownableErrorMessage.js.map +1 -0
- package/dist/core/src/progress.d.ts +3 -0
- package/dist/core/src/progress.d.ts.map +1 -0
- package/dist/core/src/progress.js +8 -0
- package/dist/core/src/progress.js.map +1 -0
- package/dist/core/src/services/EventChain.service.d.ts +47 -0
- package/dist/core/src/services/EventChain.service.d.ts.map +1 -0
- package/dist/core/src/services/EventChain.service.js +113 -0
- package/dist/core/src/services/EventChain.service.js.map +1 -0
- package/dist/core/src/services/Ownable.service.d.ts +60 -0
- package/dist/core/src/services/Ownable.service.d.ts.map +1 -0
- package/dist/core/src/services/Ownable.service.js +421 -0
- package/dist/core/src/services/Ownable.service.js.map +1 -0
- package/dist/core/src/services/Polling.service.d.ts +31 -0
- package/dist/core/src/services/Polling.service.d.ts.map +1 -0
- package/dist/core/src/services/Polling.service.js +109 -0
- package/dist/core/src/services/Polling.service.js.map +1 -0
- package/dist/core/src/services/SIWE.service.d.ts +16 -0
- package/dist/core/src/services/SIWE.service.d.ts.map +1 -0
- package/dist/core/src/services/SIWE.service.js +123 -0
- package/dist/core/src/services/SIWE.service.js.map +1 -0
- package/dist/core/src/services/StateStoreRecordStore.service.d.ts +13 -0
- package/dist/core/src/services/StateStoreRecordStore.service.d.ts.map +1 -0
- package/dist/core/src/services/StateStoreRecordStore.service.js +76 -0
- package/dist/core/src/services/StateStoreRecordStore.service.js.map +1 -0
- package/dist/core/src/services/WorkerRPC.service.d.ts +37 -0
- package/dist/core/src/services/WorkerRPC.service.d.ts.map +1 -0
- package/dist/core/src/services/WorkerRPC.service.js +219 -0
- package/dist/core/src/services/WorkerRPC.service.js.map +1 -0
- package/dist/core/src/services/workerSource.d.ts +2 -0
- package/dist/core/src/services/workerSource.d.ts.map +1 -0
- package/dist/core/src/services/workerSource.js +72 -0
- package/dist/core/src/services/workerSource.js.map +1 -0
- package/dist/core/src/types/Authority.d.ts +40 -0
- package/dist/core/src/types/Authority.d.ts.map +1 -0
- package/dist/core/src/types/Authority.js +2 -0
- package/dist/core/src/types/Authority.js.map +1 -0
- package/dist/core/src/types/EventChainStore.d.ts +12 -0
- package/dist/core/src/types/EventChainStore.d.ts.map +1 -0
- package/dist/core/src/types/EventChainStore.js +2 -0
- package/dist/core/src/types/EventChainStore.js.map +1 -0
- package/dist/core/src/types/MessageInfo.d.ts +19 -0
- package/dist/core/src/types/MessageInfo.d.ts.map +1 -0
- package/dist/core/src/types/MessageInfo.js +2 -0
- package/dist/core/src/types/MessageInfo.js.map +1 -0
- package/dist/core/src/types/OwnableRuntime.d.ts +40 -0
- package/dist/core/src/types/OwnableRuntime.d.ts.map +1 -0
- package/dist/core/src/types/OwnableRuntime.js +2 -0
- package/dist/core/src/types/OwnableRuntime.js.map +1 -0
- package/dist/core/src/types/Polling.d.ts +14 -0
- package/dist/core/src/types/Polling.d.ts.map +1 -0
- package/dist/core/src/types/Polling.js +2 -0
- package/dist/core/src/types/Polling.js.map +1 -0
- package/dist/core/src/types/SIWE.d.ts +30 -0
- package/dist/core/src/types/SIWE.d.ts.map +1 -0
- package/dist/core/src/types/SIWE.js +2 -0
- package/dist/core/src/types/SIWE.js.map +1 -0
- package/dist/core/src/types/TypedCosmWasmMsg.d.ts +12 -0
- package/dist/core/src/types/TypedCosmWasmMsg.d.ts.map +1 -0
- package/dist/core/src/types/TypedCosmWasmMsg.js +2 -0
- package/dist/core/src/types/TypedCosmWasmMsg.js.map +1 -0
- package/dist/core/src/types/TypedDict.d.ts +4 -0
- package/dist/core/src/types/TypedDict.d.ts.map +1 -0
- package/dist/core/src/types/TypedDict.js +2 -0
- package/dist/core/src/types/TypedDict.js.map +1 -0
- package/dist/core/src/types/TypedOwnableInfo.d.ts +34 -0
- package/dist/core/src/types/TypedOwnableInfo.d.ts.map +1 -0
- package/dist/core/src/types/TypedOwnableInfo.js +2 -0
- package/dist/core/src/types/TypedOwnableInfo.js.map +1 -0
- package/dist/core/src/types/TypedPackage.d.ts +35 -0
- package/dist/core/src/types/TypedPackage.d.ts.map +1 -0
- package/dist/core/src/types/TypedPackage.js +2 -0
- package/dist/core/src/types/TypedPackage.js.map +1 -0
- package/dist/platform-browser/src/index.d.ts +11 -0
- package/dist/platform-browser/src/index.d.ts.map +1 -0
- package/dist/platform-browser/src/index.js +11 -0
- package/dist/platform-browser/src/index.js.map +1 -0
- package/dist/platform-browser/src/services/IDB.service.d.ts +29 -0
- package/dist/platform-browser/src/services/IDB.service.d.ts.map +1 -0
- package/dist/platform-browser/src/services/IDB.service.js +192 -0
- package/dist/platform-browser/src/services/IDB.service.js.map +1 -0
- package/dist/platform-browser/src/services/LocalStorage.service.d.ts +14 -0
- package/dist/platform-browser/src/services/LocalStorage.service.d.ts.map +1 -0
- package/dist/platform-browser/src/services/LocalStorage.service.js +57 -0
- package/dist/platform-browser/src/services/LocalStorage.service.js.map +1 -0
- package/dist/platform-browser/src/services/Package.service.d.ts +49 -0
- package/dist/platform-browser/src/services/Package.service.d.ts.map +1 -0
- package/dist/platform-browser/src/services/Package.service.js +466 -0
- package/dist/platform-browser/src/services/Package.service.js.map +1 -0
- package/dist/platform-browser/src/services/Relay.service.d.ts +59 -0
- package/dist/platform-browser/src/services/Relay.service.d.ts.map +1 -0
- package/dist/platform-browser/src/services/Relay.service.js +299 -0
- package/dist/platform-browser/src/services/Relay.service.js.map +1 -0
- package/dist/platform-browser/src/services/SessionStorage.service.d.ts +7 -0
- package/dist/platform-browser/src/services/SessionStorage.service.d.ts.map +1 -0
- package/dist/platform-browser/src/services/SessionStorage.service.js +16 -0
- package/dist/platform-browser/src/services/SessionStorage.service.js.map +1 -0
- package/dist/platform-browser/src/utils/calculateCid.d.ts +2 -0
- package/dist/platform-browser/src/utils/calculateCid.d.ts.map +1 -0
- package/dist/platform-browser/src/utils/calculateCid.js +18 -0
- package/dist/platform-browser/src/utils/calculateCid.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export default class LocalStorageService {
|
|
2
|
+
prefix;
|
|
3
|
+
storage;
|
|
4
|
+
constructor(group = '', storage = localStorage) {
|
|
5
|
+
this.prefix = group ? `${group}:` : '';
|
|
6
|
+
this.storage = storage;
|
|
7
|
+
}
|
|
8
|
+
get(key) {
|
|
9
|
+
const value = this.storage.getItem(`${this.prefix}${key}`);
|
|
10
|
+
return value ? JSON.parse(value) : undefined;
|
|
11
|
+
}
|
|
12
|
+
set(key, value) {
|
|
13
|
+
this.storage.setItem(`${this.prefix}${key}`, JSON.stringify(value));
|
|
14
|
+
}
|
|
15
|
+
append(key, value) {
|
|
16
|
+
const list = this.get(`${this.prefix}${key}`) || [];
|
|
17
|
+
if (!Array.isArray(list))
|
|
18
|
+
throw new Error(`Unable to append value in local storage: "${key} is not an array"`);
|
|
19
|
+
list.push(value);
|
|
20
|
+
this.set(`${this.prefix}${key}`, list);
|
|
21
|
+
}
|
|
22
|
+
remove(key) {
|
|
23
|
+
this.storage.removeItem(`${this.prefix}${key}`);
|
|
24
|
+
}
|
|
25
|
+
clear() {
|
|
26
|
+
const keys = [];
|
|
27
|
+
for (let i = 0; i < this.storage.length; i++) {
|
|
28
|
+
const key = this.storage.key(i);
|
|
29
|
+
if (key && key.startsWith(this.prefix)) {
|
|
30
|
+
keys.push(key);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const key of keys) {
|
|
34
|
+
this.storage.removeItem(key);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
static clearAll(storage = localStorage) {
|
|
38
|
+
storage.clear();
|
|
39
|
+
}
|
|
40
|
+
removeItem(key, value) {
|
|
41
|
+
const list = this.get(`${this.prefix}${key}`);
|
|
42
|
+
if (!Array.isArray(list))
|
|
43
|
+
throw new Error(`"${this.prefix}${key}" is not an array in local storage`);
|
|
44
|
+
const updatedList = typeof list[0] === "object"
|
|
45
|
+
? list.filter((item) => item[value] !== value)
|
|
46
|
+
: list.filter((item) => item !== value);
|
|
47
|
+
this.set(`${this.prefix}${key}`, updatedList);
|
|
48
|
+
}
|
|
49
|
+
removeByField(key, field, value) {
|
|
50
|
+
const list = this.get(`${this.prefix}${key}`);
|
|
51
|
+
if (!Array.isArray(list))
|
|
52
|
+
throw new Error(`"${this.prefix}${key}" is not an array in local storage`);
|
|
53
|
+
const updatedList = list.filter((item) => item[field] !== value);
|
|
54
|
+
this.set(`${this.prefix}${key}`, updatedList);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=LocalStorage.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalStorage.service.js","sourceRoot":"","sources":["../../../../src/services/LocalStorage.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import LocalStorageService from "./LocalStorage.service";
|
|
2
|
+
import type { TypedPackage, TypedPackageStub } from "@ownables/core/types/TypedPackage";
|
|
3
|
+
import JSZip from "jszip";
|
|
4
|
+
import IDBService from "./IDB.service";
|
|
5
|
+
import { RelayService } from "./Relay.service";
|
|
6
|
+
import { Buffer } from "buffer";
|
|
7
|
+
import { EventChain } from "eqty-core";
|
|
8
|
+
export default class PackageService {
|
|
9
|
+
private idb;
|
|
10
|
+
private relay;
|
|
11
|
+
private localStorage;
|
|
12
|
+
private readonly exampleUrl;
|
|
13
|
+
private readonly examples;
|
|
14
|
+
private readonly calculateCidFn;
|
|
15
|
+
private readonly fetchFn;
|
|
16
|
+
private readonly fileReaderFactory;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
constructor(idb: IDBService, relay: RelayService, localStorage: LocalStorageService, options?: {
|
|
19
|
+
exampleUrl?: string;
|
|
20
|
+
examples?: TypedPackageStub[];
|
|
21
|
+
calculateCidFn?: (files: File[]) => Promise<string>;
|
|
22
|
+
fetchFn?: (input: string, init?: RequestInit) => Promise<Response>;
|
|
23
|
+
fileReaderFactory?: () => FileReader;
|
|
24
|
+
logger?: Pick<Console, "debug" | "info" | "warn" | "error">;
|
|
25
|
+
});
|
|
26
|
+
list(): Array<TypedPackage | TypedPackageStub>;
|
|
27
|
+
info(nameOrCid: string, uniqueMessageHash?: string): TypedPackage;
|
|
28
|
+
private storePackageInfo;
|
|
29
|
+
extractAssets(zipFile: File, chain?: boolean): Promise<File[]>;
|
|
30
|
+
private storeAssets;
|
|
31
|
+
private verifyStoreExists;
|
|
32
|
+
private retryStoreVerification;
|
|
33
|
+
base64ToBuffer(base64: string): Buffer;
|
|
34
|
+
bufferToString(buffer: Buffer): string;
|
|
35
|
+
getChainJson(filename: string, files: any): Promise<any>;
|
|
36
|
+
private getPackageJson;
|
|
37
|
+
private getCapabilities;
|
|
38
|
+
private validatePackageFormat;
|
|
39
|
+
processPackage(message: any, uniqueMessageHash?: string, isNotLocal?: boolean): Promise<TypedPackage | null>;
|
|
40
|
+
import(zipFile: File): Promise<TypedPackage>;
|
|
41
|
+
importFromRelay(): Promise<(boolean | TypedPackage[])[] | null>;
|
|
42
|
+
isCurrentEvent(chainJson: EventChain): Promise<boolean | undefined>;
|
|
43
|
+
downloadExample(key: string): Promise<TypedPackage>;
|
|
44
|
+
getAsset(cid: string, name: string, read: (fr: FileReader, contents: Blob | File) => void): Promise<string | ArrayBuffer>;
|
|
45
|
+
getAssetAsText(cid: string, name: string): Promise<string>;
|
|
46
|
+
getAssetAsDataUri(cid: string, name: string): Promise<string>;
|
|
47
|
+
zip(cid: string): Promise<JSZip>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=Package.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Package.service.d.ts","sourceRoot":"","sources":["../../../../src/services/Package.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import JSZip from "jszip";
|
|
2
|
+
import mime from "mime/lite";
|
|
3
|
+
import calculateCid from "../utils/calculateCid";
|
|
4
|
+
import { Buffer } from "buffer";
|
|
5
|
+
import { EventChain } from "eqty-core";
|
|
6
|
+
const getMimeType = (filename) => mime?.getType?.(filename);
|
|
7
|
+
const capabilitiesStaticOwnable = {
|
|
8
|
+
isDynamic: false,
|
|
9
|
+
hasMetadata: false,
|
|
10
|
+
hasWidgetState: false,
|
|
11
|
+
isConsumable: false,
|
|
12
|
+
isConsumer: false,
|
|
13
|
+
isTransferable: false,
|
|
14
|
+
};
|
|
15
|
+
export default class PackageService {
|
|
16
|
+
idb;
|
|
17
|
+
relay;
|
|
18
|
+
localStorage;
|
|
19
|
+
exampleUrl;
|
|
20
|
+
examples;
|
|
21
|
+
calculateCidFn;
|
|
22
|
+
fetchFn;
|
|
23
|
+
fileReaderFactory;
|
|
24
|
+
logger;
|
|
25
|
+
constructor(idb, relay, localStorage, options = {}) {
|
|
26
|
+
this.idb = idb;
|
|
27
|
+
this.relay = relay;
|
|
28
|
+
this.localStorage = localStorage;
|
|
29
|
+
this.exampleUrl = options.exampleUrl;
|
|
30
|
+
this.examples = options.examples ?? [];
|
|
31
|
+
this.calculateCidFn = options.calculateCidFn ?? calculateCid;
|
|
32
|
+
this.fetchFn = options.fetchFn ?? ((input, init) => fetch(input, init));
|
|
33
|
+
this.fileReaderFactory = options.fileReaderFactory ?? (() => new FileReader());
|
|
34
|
+
this.logger = options.logger ?? console;
|
|
35
|
+
}
|
|
36
|
+
list() {
|
|
37
|
+
const local = (this.localStorage.get("packages") || []);
|
|
38
|
+
for (const pkg of local) {
|
|
39
|
+
pkg.versions = pkg.versions.map(({ date, cid }) => ({
|
|
40
|
+
date: new Date(date),
|
|
41
|
+
cid,
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
const set = new Map([...this.examples, ...local].map((pkg) => [pkg.name, pkg])).values();
|
|
45
|
+
return Array.from(set).sort((a, b) => (a.title >= b.title ? 1 : -1));
|
|
46
|
+
}
|
|
47
|
+
info(nameOrCid, uniqueMessageHash) {
|
|
48
|
+
const packages = (this.localStorage.get("packages") ||
|
|
49
|
+
[]);
|
|
50
|
+
const found = packages.find((pkg) => (pkg.name === nameOrCid ||
|
|
51
|
+
pkg.versions.some((v) => v.cid === nameOrCid)) &&
|
|
52
|
+
(!uniqueMessageHash ||
|
|
53
|
+
pkg.versions.some((v) => v.uniqueMessageHash === uniqueMessageHash)));
|
|
54
|
+
if (!found)
|
|
55
|
+
throw new Error(`Package not found: ${nameOrCid}`);
|
|
56
|
+
return found;
|
|
57
|
+
}
|
|
58
|
+
storePackageInfo(title, name, version, ownablesAbi, wireFormat, description, cid, keywords, capabilities, isNotLocal, uniqueMessageHash) {
|
|
59
|
+
const packages = (this.localStorage.get("packages") ||
|
|
60
|
+
[]);
|
|
61
|
+
// Locate the package with matching cid and uniqueMessageHash
|
|
62
|
+
let pkg = packages.find((pkg) => pkg.name === name &&
|
|
63
|
+
pkg.cid === cid &&
|
|
64
|
+
pkg.uniqueMessageHash === uniqueMessageHash);
|
|
65
|
+
if (!pkg) {
|
|
66
|
+
const versionEntry = uniqueMessageHash
|
|
67
|
+
? { date: new Date(), cid, uniqueMessageHash }
|
|
68
|
+
: { date: new Date(), cid };
|
|
69
|
+
// Create new package entry if not found
|
|
70
|
+
const createdPkg = {
|
|
71
|
+
title,
|
|
72
|
+
name,
|
|
73
|
+
cid,
|
|
74
|
+
keywords,
|
|
75
|
+
...capabilities,
|
|
76
|
+
...(version ? { version } : {}),
|
|
77
|
+
...(ownablesAbi ? { ownablesAbi } : {}),
|
|
78
|
+
...(wireFormat ? { wireFormat } : {}),
|
|
79
|
+
...(description ? { description } : {}),
|
|
80
|
+
...(isNotLocal ? { isNotLocal } : {}),
|
|
81
|
+
...(uniqueMessageHash ? { uniqueMessageHash } : {}),
|
|
82
|
+
versions: [versionEntry],
|
|
83
|
+
};
|
|
84
|
+
pkg = createdPkg;
|
|
85
|
+
packages.push(createdPkg);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Update package and add new version info if it's an update
|
|
89
|
+
Object.assign(pkg, {
|
|
90
|
+
keywords,
|
|
91
|
+
...(version ? { version } : {}),
|
|
92
|
+
...(ownablesAbi ? { ownablesAbi } : {}),
|
|
93
|
+
...(wireFormat ? { wireFormat } : {}),
|
|
94
|
+
...(description ? { description } : {}),
|
|
95
|
+
...(uniqueMessageHash ? { uniqueMessageHash } : {}),
|
|
96
|
+
...capabilities,
|
|
97
|
+
});
|
|
98
|
+
const versionEntry = uniqueMessageHash
|
|
99
|
+
? { date: new Date(), cid, uniqueMessageHash }
|
|
100
|
+
: { date: new Date(), cid };
|
|
101
|
+
pkg.versions.push(versionEntry);
|
|
102
|
+
}
|
|
103
|
+
// Save all packages back to LocalStorage under the single "packages" key
|
|
104
|
+
this.localStorage.set("packages", packages);
|
|
105
|
+
if (!pkg)
|
|
106
|
+
throw new Error("Failed to create package entry");
|
|
107
|
+
return pkg;
|
|
108
|
+
}
|
|
109
|
+
async extractAssets(zipFile, chain) {
|
|
110
|
+
const zip = await JSZip.loadAsync(zipFile);
|
|
111
|
+
if (chain) {
|
|
112
|
+
return await Promise.all(Array.from(Object.entries(zip.files))
|
|
113
|
+
.filter(([filename]) => !filename.startsWith("."))
|
|
114
|
+
.map(async ([filename, file]) => {
|
|
115
|
+
const blob = await file.async("blob");
|
|
116
|
+
const type = getMimeType(filename) || "application/octet-stream";
|
|
117
|
+
return new File([blob], filename, { type });
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
return await Promise.all(Array.from(Object.entries(zip.files))
|
|
121
|
+
.filter(([filename]) => !filename.startsWith(".") && filename !== "chain.json")
|
|
122
|
+
.map(async ([filename, file]) => {
|
|
123
|
+
const blob = await file.async("blob");
|
|
124
|
+
const type = getMimeType(filename) || "application/octet-stream";
|
|
125
|
+
return new File([blob], filename, { type });
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
async storeAssets(cid, files) {
|
|
129
|
+
const storeName = `package:${cid}`;
|
|
130
|
+
try {
|
|
131
|
+
if (!(await this.idb.hasStore(storeName))) {
|
|
132
|
+
await this.idb.createStore(storeName);
|
|
133
|
+
}
|
|
134
|
+
await this.idb.setAll(storeName, Object.fromEntries(files.map((file) => [file.name, file])));
|
|
135
|
+
// Verify store exists and has data
|
|
136
|
+
await this.verifyStoreExists(storeName, files.length);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
// Check for quota errors
|
|
140
|
+
if (error instanceof Error) {
|
|
141
|
+
if (error.name === 'QuotaExceededError' ||
|
|
142
|
+
error.message?.includes('quota') ||
|
|
143
|
+
error.message?.includes('QuotaExceeded')) {
|
|
144
|
+
throw new Error(`Device storage quota exceeded. Please free up space on your device and try again.`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async verifyStoreExists(storeName, expectedFileCount) {
|
|
151
|
+
const hasStore = await this.idb.hasStore(storeName);
|
|
152
|
+
if (!hasStore) {
|
|
153
|
+
throw new Error(`Store ${storeName} was not created successfully`);
|
|
154
|
+
}
|
|
155
|
+
// Verify data was written
|
|
156
|
+
try {
|
|
157
|
+
const keys = await this.idb.keys(storeName);
|
|
158
|
+
if (keys.length < expectedFileCount) {
|
|
159
|
+
throw new Error(`Store verification failed: expected ${expectedFileCount} files, found ${keys.length}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
// Check if it's a quota error
|
|
164
|
+
if (error instanceof Error && error.name === 'QuotaExceededError') {
|
|
165
|
+
throw new Error(`Device storage quota exceeded. Please free up space and try again.`);
|
|
166
|
+
}
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async retryStoreVerification(storeName, expectedFileCount, maxRetries = 3, delay = 1000) {
|
|
171
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
172
|
+
try {
|
|
173
|
+
await this.verifyStoreExists(storeName, expectedFileCount);
|
|
174
|
+
return; // Success
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
this.logger.warn(`Store verification attempt ${attempt}/${maxRetries} failed:`, error);
|
|
178
|
+
if (attempt < maxRetries) {
|
|
179
|
+
// Wait before retry (exponential backoff)
|
|
180
|
+
await new Promise((resolve) => setTimeout(resolve, delay * attempt));
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
// Last attempt failed
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
base64ToBuffer(base64) {
|
|
190
|
+
return Buffer.from(base64, "base64");
|
|
191
|
+
}
|
|
192
|
+
bufferToString(buffer) {
|
|
193
|
+
return buffer.toString("utf8");
|
|
194
|
+
}
|
|
195
|
+
async getChainJson(filename, files) {
|
|
196
|
+
const extractedFile = await this.extractAssets(files, true);
|
|
197
|
+
const file = extractedFile.find((file) => file.name === filename);
|
|
198
|
+
if (!file)
|
|
199
|
+
throw new Error(`Invalid package: missing ${filename}`);
|
|
200
|
+
const fileContent = await file.text();
|
|
201
|
+
const json = JSON.parse(fileContent);
|
|
202
|
+
json.events = json.events.map((event) => {
|
|
203
|
+
if (event.data.startsWith("base64:")) {
|
|
204
|
+
const base64Data = event.data.slice(7);
|
|
205
|
+
const bufferData = this.base64ToBuffer(base64Data);
|
|
206
|
+
event.parsedData = JSON.parse(this.bufferToString(bufferData));
|
|
207
|
+
}
|
|
208
|
+
return event;
|
|
209
|
+
});
|
|
210
|
+
return json;
|
|
211
|
+
}
|
|
212
|
+
async getPackageJson(filename, files) {
|
|
213
|
+
const file = files.find((file) => file.name === filename);
|
|
214
|
+
if (!file)
|
|
215
|
+
throw new Error(`Invalid package: missing ${filename}`);
|
|
216
|
+
return JSON.parse(await file.text());
|
|
217
|
+
}
|
|
218
|
+
async getCapabilities(files) {
|
|
219
|
+
if (files.findIndex((file) => file.name === "package.json") < 0)
|
|
220
|
+
throw new Error("Invalid package: missing package.json");
|
|
221
|
+
if (files.findIndex((file) => file.name === "ownable_bg.wasm") < 0)
|
|
222
|
+
return capabilitiesStaticOwnable;
|
|
223
|
+
const query = await this.getPackageJson("query_msg.json", files);
|
|
224
|
+
const execute = await this.getPackageJson("execute_msg.json", files);
|
|
225
|
+
const hasMethod = (schema, find) => schema.oneOf.findIndex((method) => method.required.includes(find)) >= 0;
|
|
226
|
+
if (!hasMethod(query, "get_info"))
|
|
227
|
+
throw new Error("Invalid package: missing `get_info` query method");
|
|
228
|
+
return {
|
|
229
|
+
isDynamic: true,
|
|
230
|
+
hasMetadata: hasMethod(query, "get_metadata"),
|
|
231
|
+
hasWidgetState: hasMethod(query, "get_widget_state"),
|
|
232
|
+
isConsumable: hasMethod(execute, "consume"),
|
|
233
|
+
isConsumer: hasMethod(query, "is_consumer_of"),
|
|
234
|
+
isTransferable: hasMethod(execute, "transfer"),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
validatePackageFormat(packageJson, files) {
|
|
238
|
+
const hasWasm = files.some((file) => file.name === "ownable_bg.wasm");
|
|
239
|
+
if (!hasWasm)
|
|
240
|
+
return;
|
|
241
|
+
const ownablesAbi = packageJson.ownablesAbi;
|
|
242
|
+
const wireFormat = packageJson.wireFormat;
|
|
243
|
+
if (ownablesAbi !== "1") {
|
|
244
|
+
throw new Error(`Invalid package: expected package.json ownablesAbi to be \"1\", got \"${String(ownablesAbi)}\"`);
|
|
245
|
+
}
|
|
246
|
+
if (wireFormat !== "cbor") {
|
|
247
|
+
throw new Error(`Invalid package: expected package.json wireFormat to be \"cbor\", got \"${String(wireFormat)}\"`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async processPackage(message, uniqueMessageHash, isNotLocal = false) {
|
|
251
|
+
let chainJson;
|
|
252
|
+
let files;
|
|
253
|
+
let packageJson;
|
|
254
|
+
//Extract files
|
|
255
|
+
if (isNotLocal) {
|
|
256
|
+
files = await this.extractAssets(message.data.buffer, false);
|
|
257
|
+
packageJson = await this.getPackageJson("package.json", files);
|
|
258
|
+
chainJson = await this.getChainJson("chain.json", message.data.buffer);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
files = message; // Local files
|
|
262
|
+
packageJson = await this.getPackageJson("package.json", files);
|
|
263
|
+
}
|
|
264
|
+
//Check for required JSON files
|
|
265
|
+
if (!packageJson) {
|
|
266
|
+
throw new Error("Missing package.json in extracted assets");
|
|
267
|
+
}
|
|
268
|
+
if (isNotLocal && !chainJson) {
|
|
269
|
+
throw new Error("Missing chain.json for relay package");
|
|
270
|
+
}
|
|
271
|
+
//Calculate CID
|
|
272
|
+
const cid = await this.calculateCidFn(files);
|
|
273
|
+
//Check for duplicates
|
|
274
|
+
if (await this.idb.hasStore(`package:${cid}`)) {
|
|
275
|
+
if (isNotLocal && chainJson && !(await this.isCurrentEvent(chainJson))) {
|
|
276
|
+
this.logger.warn(`Package with CID ${cid} is already current or newer.`);
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//Prepare metadata
|
|
281
|
+
const name = packageJson.name || "Unnamed Package";
|
|
282
|
+
const title = name
|
|
283
|
+
.replace(/^ownable-|-ownable$/, "")
|
|
284
|
+
.replace(/[-_]+/, " ")
|
|
285
|
+
.replace(/\b\w/, (c) => c.toUpperCase());
|
|
286
|
+
const description = packageJson.description;
|
|
287
|
+
const version = packageJson.version;
|
|
288
|
+
const ownablesAbi = packageJson.ownablesAbi;
|
|
289
|
+
const wireFormat = packageJson.wireFormat;
|
|
290
|
+
const keywords = packageJson.keywords || [];
|
|
291
|
+
this.validatePackageFormat(packageJson, files);
|
|
292
|
+
const capabilities = await this.getCapabilities(files);
|
|
293
|
+
//Store assets
|
|
294
|
+
await this.storeAssets(cid, files);
|
|
295
|
+
//Store package info
|
|
296
|
+
const pkg = this.storePackageInfo(title, name, version, ownablesAbi, wireFormat, description, cid, keywords, capabilities, isNotLocal, uniqueMessageHash);
|
|
297
|
+
//Attach chain if needed
|
|
298
|
+
if (isNotLocal && chainJson) {
|
|
299
|
+
pkg.chain = EventChain.from(chainJson);
|
|
300
|
+
}
|
|
301
|
+
if (uniqueMessageHash) {
|
|
302
|
+
pkg.uniqueMessageHash = uniqueMessageHash;
|
|
303
|
+
}
|
|
304
|
+
return pkg;
|
|
305
|
+
}
|
|
306
|
+
async import(zipFile) {
|
|
307
|
+
const files = await this.extractAssets(zipFile);
|
|
308
|
+
const pkg = await this.processPackage(files);
|
|
309
|
+
if (!pkg) {
|
|
310
|
+
throw new Error("Failed to process package: duplicate or invalid package.");
|
|
311
|
+
}
|
|
312
|
+
// Verify store exists after import
|
|
313
|
+
const storeName = `package:${pkg.cid}`;
|
|
314
|
+
const hasStore = await this.idb.hasStore(storeName);
|
|
315
|
+
if (!hasStore) {
|
|
316
|
+
// Retry verification in background (non-blocking)
|
|
317
|
+
this.retryStoreVerification(storeName, files.length, 3, 1000)
|
|
318
|
+
.catch((error) => {
|
|
319
|
+
this.logger.error(`Background store verification failed after retries:`, error);
|
|
320
|
+
// Optionally notify user or log to error tracking service
|
|
321
|
+
});
|
|
322
|
+
// Still return the package even if verification is pending
|
|
323
|
+
// The background retry will handle it
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
// Store exists, verify data integrity
|
|
327
|
+
try {
|
|
328
|
+
await this.verifyStoreExists(storeName, files.length);
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
// If verification fails, start background retry
|
|
332
|
+
this.logger.warn(`Initial store verification failed, retrying in background:`, error);
|
|
333
|
+
this.retryStoreVerification(storeName, files.length, 3, 1000)
|
|
334
|
+
.catch((retryError) => {
|
|
335
|
+
this.logger.error(`Background store verification failed after retries:`, retryError);
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return pkg;
|
|
340
|
+
}
|
|
341
|
+
async importFromRelay() {
|
|
342
|
+
try {
|
|
343
|
+
const relayData = await this.relay.readAll();
|
|
344
|
+
if (!relayData || !Array.isArray(relayData) || relayData.length === 0) {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
// Filter out null values and transform to MessageExt format
|
|
348
|
+
const validMessages = relayData
|
|
349
|
+
.filter((data) => data !== null && data.message && data.hash)
|
|
350
|
+
.map((data) => ({
|
|
351
|
+
hash: data.hash,
|
|
352
|
+
recipient: data.message.recipient || "",
|
|
353
|
+
sender: data.message.sender || {},
|
|
354
|
+
size: data.message.data?.length || 0,
|
|
355
|
+
timestamp: new Date(data.message.timestamp || Date.now()),
|
|
356
|
+
type: data.message.meta?.type || "basic",
|
|
357
|
+
data: data.message.data,
|
|
358
|
+
signature: data.message.signature,
|
|
359
|
+
_hash: data.message.hash,
|
|
360
|
+
parsedData: data.message.parsedData || "",
|
|
361
|
+
messageHash: data.hash,
|
|
362
|
+
message: data.message,
|
|
363
|
+
}));
|
|
364
|
+
if (validMessages.length === 0) {
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
const filteredMessages = await this.relay.checkDuplicateMessage(validMessages);
|
|
368
|
+
let triggerRefresh = false;
|
|
369
|
+
const results = await Promise.all(filteredMessages.map(async (data) => {
|
|
370
|
+
try {
|
|
371
|
+
const { message, messageHash } = data;
|
|
372
|
+
const files = await this.extractAssets(message.data.buffer);
|
|
373
|
+
if (files.length === 0)
|
|
374
|
+
return null;
|
|
375
|
+
// Pass the hash to the processing function
|
|
376
|
+
const pkg = await this.processPackage(files, messageHash, true);
|
|
377
|
+
if (!pkg)
|
|
378
|
+
return;
|
|
379
|
+
if (await this.idb.hasStore(`package:${pkg.cid}`)) {
|
|
380
|
+
triggerRefresh = true;
|
|
381
|
+
}
|
|
382
|
+
return pkg;
|
|
383
|
+
}
|
|
384
|
+
catch (err) {
|
|
385
|
+
this.logger.error("Error processing data:", err);
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
}));
|
|
389
|
+
const packages = results.filter((pkg) => pkg !== null && pkg !== undefined);
|
|
390
|
+
return [packages, triggerRefresh];
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
this.logger.error("Error:", error);
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
async isCurrentEvent(chainJson) {
|
|
398
|
+
let existingChain;
|
|
399
|
+
if (await this.idb.hasStore(`ownable:${chainJson.id}`)) {
|
|
400
|
+
existingChain = await this.idb.get(`ownable:${chainJson.id}`, "chain");
|
|
401
|
+
}
|
|
402
|
+
if (existingChain === undefined || existingChain.events === undefined) {
|
|
403
|
+
return true;
|
|
404
|
+
}
|
|
405
|
+
if (existingChain.events?.length) {
|
|
406
|
+
if (chainJson.events.length > existingChain.events.length) {
|
|
407
|
+
return true;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
async downloadExample(key) {
|
|
415
|
+
if (!this.exampleUrl)
|
|
416
|
+
throw new Error("Unable to download example ownable: URL not configured");
|
|
417
|
+
const filename = key.replace(/^ownable-/, "") + ".zip";
|
|
418
|
+
const response = await this.fetchFn(`${this.exampleUrl}/${filename}`);
|
|
419
|
+
if (!response.ok)
|
|
420
|
+
throw new Error(`Failed to download example ownable: ${response.statusText}`);
|
|
421
|
+
const contentType = response.headers.get("Content-Type")?.trim();
|
|
422
|
+
if (contentType !== "application/zip" &&
|
|
423
|
+
contentType !== "application/x-zip-compressed")
|
|
424
|
+
throw new Error("Failed to download example ownable: invalid content type");
|
|
425
|
+
const zipFile = new File([await response.blob()], `${key}.zip`, {
|
|
426
|
+
type: "application/zip",
|
|
427
|
+
});
|
|
428
|
+
return this.import(zipFile);
|
|
429
|
+
}
|
|
430
|
+
async getAsset(cid, name, read) {
|
|
431
|
+
return new Promise((resolve, reject) => {
|
|
432
|
+
const fileReader = this.fileReaderFactory();
|
|
433
|
+
this.idb.get(`package:${cid}`, name).then((mediaFile) => {
|
|
434
|
+
if (!mediaFile) {
|
|
435
|
+
reject(`Asset "${name}" is not in package ${cid}`);
|
|
436
|
+
}
|
|
437
|
+
fileReader.onload = (event) => {
|
|
438
|
+
const result = event.target?.result;
|
|
439
|
+
if (result === null || result === undefined) {
|
|
440
|
+
reject(new Error(`Failed to read asset "${name}" from package ${cid}`));
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
resolve(result);
|
|
444
|
+
};
|
|
445
|
+
read(fileReader, mediaFile);
|
|
446
|
+
}, (error) => reject(error));
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
getAssetAsText(cid, name) {
|
|
450
|
+
const read = (fr, mediaFile) => fr.readAsText(mediaFile);
|
|
451
|
+
return this.getAsset(cid, name, read);
|
|
452
|
+
}
|
|
453
|
+
getAssetAsDataUri(cid, name) {
|
|
454
|
+
const read = (fr, mediaFile) => fr.readAsDataURL(mediaFile);
|
|
455
|
+
return this.getAsset(cid, name, read);
|
|
456
|
+
}
|
|
457
|
+
async zip(cid) {
|
|
458
|
+
const zip = new JSZip();
|
|
459
|
+
const files = await this.idb.getAll(`package:${cid}`);
|
|
460
|
+
for (const file of files) {
|
|
461
|
+
zip.file(file.name, file);
|
|
462
|
+
}
|
|
463
|
+
return zip;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
//# sourceMappingURL=Package.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Package.service.js","sourceRoot":"","sources":["../../../../src/services/Package.service.ts"],"names":[],"mappings":"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"}
|