Skip to content

Commit 59f8314

Browse files
authored
Merge pull request #77 from polywrap/embed-wraps-from-wrapscan
chore: embed wraps from wrapscan.io
2 parents 2744918 + 24c0798 commit 59f8314

File tree

8 files changed

+612
-694
lines changed

8 files changed

+612
-694
lines changed

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616
"reset": "yarn clean && (yarn || yarn || yarn) && yarn build",
1717
"clean": "npx rimraf ./**/node_modules ./**/yarn.lock ./**/build ./**/coverage ./**/.polywrap",
1818
"install:test-wraps": "lerna run generate:wraps --scope @polywrap/test-cases",
19-
"build": "yarn build:common && yarn build:client && yarn install:test-wraps",
20-
"build:common": "lerna run build --ignore @polywrap/core-client-js --ignore @polywrap/client-js --ignore @polywrap/uri-resolver-extensions-js --ignore @polywrap/client-config-builder-js --ignore @polywrap/*-config-bundle-js",
21-
"build:client": "lerna run build --scope @polywrap/core-client-js --scope @polywrap/client-js --scope @polywrap/uri-resolver-extensions-js --scope @polywrap/client-config-builder-js --scope @polywrap/*-config-bundle-js",
19+
"build": "yarn build:common && yarn build:bundles && yarn build:client && yarn install:test-wraps",
20+
"build:common": "lerna run build --ignore @polywrap/*-config-bundle-js --ignore @polywrap/core-client-js --ignore @polywrap/client-js --ignore @polywrap/client-config-builder-js",
21+
"build:bundles": "lerna run build --scope @polywrap/*-config-bundle-js",
22+
"build:client": "lerna run build --scope @polywrap/core-client-js --scope @polywrap/client-js --scope @polywrap/client-config-builder-js",
2223
"build:docs": "lerna run build:docs",
2324
"lint": "lerna run lint",
2425
"lint:fix": "lerna run lint -- --fix",

packages/config-bundles/sys/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"@polywrap/msgpack-js": "0.12.x"
3434
},
3535
"devDependencies": {
36-
"@polywrap/wrap-manifest-types-js": "0.12.2",
36+
"@polywrap/client-js": "~0.12.2",
3737
"doc-snippets": "~1.0.0",
3838
"rimraf": "3.0.2",
3939
"ts-node": "10.9.1",

packages/config-bundles/sys/scripts/embed-wraps.ts

Lines changed: 86 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,108 @@
11
import fs from "fs";
22
import path from "path";
3-
import { deserializeWrapManifest } from "@polywrap/wrap-manifest-types-js";
3+
import rimraf from "rimraf";
4+
import {
5+
PolywrapClient,
6+
PolywrapClientConfigBuilder,
7+
Uri
8+
} from "@polywrap/client-js";
9+
10+
const embeds = {
11+
"async-ipfs-resolver": "wrapscan.io/polywrap/[email protected]",
12+
"file-system-resolver": "wrapscan.io/polywrap/[email protected]",
13+
"http-resolver": "wrapscan.io/polywrap/[email protected]",
14+
"ipfs-http-client": "https://wraps.wrapscan.io/r/polywrap/[email protected]"
15+
};
16+
17+
function toBase64(data: string | Uint8Array): string {
18+
if (typeof data === "string") {
19+
// Convert string to base64
20+
return btoa(unescape(encodeURIComponent(data)));
21+
} else if (data instanceof Uint8Array) {
22+
// Convert Uint8Array to base64
23+
const binaryString = Array.prototype.map.call(data, (char: number) => String.fromCharCode(char)).join('');
24+
return btoa(binaryString);
25+
}
26+
throw new Error('Invalid data type');
27+
}
428

529
async function main() {
630

731
const embedsDir = path.join(__dirname, "../src/embeds");
8-
const embedsDirents = fs.readdirSync(embedsDir, { withFileTypes: true });
32+
const config = new PolywrapClientConfigBuilder()
33+
.addDefaults();
34+
35+
// Remove any embed redirects that may exist
36+
for (const embedUri of Object.values(embeds)) {
37+
config.removeRedirect(embedUri);
38+
}
39+
40+
const client = new PolywrapClient(config.build());
41+
let fail = false;
942

10-
const wrapperDirs: string[] = [];
43+
for (const [embedName, embedUri] of Object.entries(embeds)) {
1144

12-
for (const dirent of embedsDirents) {
13-
if (dirent.isDirectory()) {
14-
wrapperDirs.push(path.join(embedsDir, dirent.name));
45+
const logError = (message: string) => {
46+
fail = true;
47+
console.error(message);
1548
}
16-
}
1749

18-
for (const wrapperDir of wrapperDirs) {
19-
const wasmBytes = fs.readFileSync(
20-
path.join(wrapperDir, "wrap.wasm")
21-
);
22-
const infoBytes = fs.readFileSync(
23-
path.join(wrapperDir, "wrap.info")
24-
);
50+
const result = await client.loadWrapper(Uri.from(embedUri));
2551

26-
try {
27-
// Make sure we can load the wasm module
28-
await deserializeWrapManifest(infoBytes);
29-
} catch (err) {
30-
throw Error(`Unable to load wrapper at ${wrapperDir}`);
52+
if (!result.ok) {
53+
logError(`Failed to load ${embedUri}`);
54+
continue;
3155
}
3256

57+
const wrap = result.value;
58+
59+
const files = await Promise.all([
60+
wrap.getFile({ path: "wrap.info" }).then((result) => {
61+
if (!result.ok) {
62+
logError(`Failed to load wrap.info from ${embedUri}`);
63+
return undefined;
64+
}
65+
return result.value;
66+
}),
67+
wrap.getFile({ path: "wrap.wasm" }).then((result) => {
68+
if (!result.ok) {
69+
logError(`Failed to load wrap.wasm from ${embedUri}`);
70+
return undefined;
71+
}
72+
return result.value;
73+
}),
74+
]);
75+
const wrapInfo = files[0];
76+
const wrapWasm = files[1];
77+
78+
if (!wrapInfo || !wrapWasm) {
79+
continue;
80+
}
81+
82+
const wrapDir = path.join(embedsDir, embedName);
83+
rimraf.sync(wrapDir);
84+
fs.mkdirSync(wrapDir);
85+
fs.writeFileSync(
86+
path.join(wrapDir, "wrap.wasm"),
87+
wrapWasm
88+
);
89+
fs.writeFileSync(
90+
path.join(wrapDir, "wrap.info"),
91+
wrapInfo
92+
);
3393
fs.writeFileSync(
34-
path.join(wrapperDir, "wrap.ts"),
94+
path.join(wrapDir, "wrap.ts"),
3595
`// NOTE: This file is auto-generated, do not modify by hand!
3696
// See: ./scripts/embed-wrappers.ts
3797
import { WasmPackage } from "@polywrap/wasm-js";
3898
import toUint8Array from "base64-to-uint8array";
3999
40100
const wrap_wasm = toUint8Array(
41-
"${wasmBytes.toString("base64")}"
101+
"${toBase64(wrapWasm)}"
42102
);
43103
44104
const wrap_info = toUint8Array(
45-
"${infoBytes.toString("base64")}"
105+
"${toBase64(wrapInfo)}"
46106
);
47107
48108
export const wasmPackage = WasmPackage.from(
@@ -52,6 +112,10 @@ export const wasmPackage = WasmPackage.from(
52112
`
53113
);
54114
}
115+
116+
if (fail) {
117+
throw Error("Failed to embed all wraps.")
118+
}
55119
}
56120

57121
main()

packages/config-bundles/sys/src/common.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,13 @@ export const bundle: SysCommonBundle = {
8282
redirectFrom: ["wrapscan.io/polywrap/[email protected]"],
8383
},
8484
ipfsResolver: {
85-
uri: "embed/async-ipfs-uri-resolver@1.0.0",
85+
uri: "embed/ipfs-uri-resolver-async@1.0",
8686
package: ipfsResolver.wasmPackage,
8787
implements: [
88-
"wrapscan.io/polywrap/async-[email protected]",
88+
"wrapscan.io/polywrap/ipfs-uri-resolver-async@1.0",
8989
ExtendableUriResolver.defaultExtInterfaceUris[0].uri,
9090
],
91-
redirectFrom: ["wrapscan.io/polywrap/async-[email protected]"],
91+
redirectFrom: ["wrapscan.io/polywrap/ipfs-uri-resolver-async@1.0"],
9292
env: {
9393
provider: ipfsProviders[0],
9494
fallbackProviders: ipfsProviders.slice(1),
Binary file not shown.

packages/config-bundles/sys/src/embeds/ipfs-http-client/wrap.ts

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

packages/tracing/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@opentelemetry/sdk-trace-web": "1.6.0"
2727
},
2828
"devDependencies": {
29-
"@types/node": "^18.14.6",
29+
"@types/node": "~18.15.0",
3030
"rimraf": "3.0.2",
3131
"typescript": "4.9.5"
3232
},

0 commit comments

Comments
 (0)