@magicblock-labs/ephemeral-rollups-kit 0.6.5 → 0.7.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/access-control/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,eAAO,MAAM,gBAAgB,QAA2B,CAAC;AAmBzD,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,GACxD,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC/C"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/access-control/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,eAAO,MAAM,gBAAgB,QAA2B,CAAC;AAoBzD,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,GACxD,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA6C/C"}
@@ -6,7 +6,13 @@ exports.SESSION_DURATION = 1000 * 60 * 60 * 24 * 30;
6
6
  async function getAuthToken(rpcUrl, publicKey, signMessage) {
7
7
  const bs58 = (await import("bs58")).default;
8
8
  const challengeResponse = await fetch(`${rpcUrl}/auth/challenge?pubkey=${publicKey.toString()}`);
9
- const { challenge } = await challengeResponse.json();
9
+ const { challenge, error } = await challengeResponse.json();
10
+ if (error != null && error !== "") {
11
+ throw new Error(`Failed to get challenge: ${error}`);
12
+ }
13
+ if (challenge == null || challenge === "") {
14
+ throw new Error("No challenge received");
15
+ }
10
16
  const signature = await signMessage(new Uint8Array(Buffer.from(challenge, "utf-8")));
11
17
  const signatureString = bs58.encode(signature);
12
18
  const authResponse = await fetch(`${rpcUrl}/auth/login`, {
@@ -22,6 +28,9 @@ async function getAuthToken(rpcUrl, publicKey, signMessage) {
22
28
  if (authResponse.status !== 200) {
23
29
  throw new Error(`Failed to authenticate: ${authJson.error}`);
24
30
  }
31
+ if (authJson.token == null || authJson.token === "") {
32
+ throw new Error("No token received");
33
+ }
25
34
  const expiresAt = authJson.expiresAt ?? Date.now() + exports.SESSION_DURATION;
26
35
  return { token: authJson.token, expiresAt };
27
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/access-control/auth.ts"],"names":[],"mappings":";;;AAqBA,oCAsCC;AAzDY,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAmBlD,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,SAAkB,EAClB,WAAyD;IAGzD,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAG5C,MAAM,iBAAiB,GAAG,MAAM,KAAK,CACnC,GAAG,MAAM,0BAA0B,SAAS,CAAC,QAAQ,EAAE,EAAE,CAC1D,CAAC;IACF,MAAM,EAAE,SAAS,EAAE,GAA0B,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAG5E,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAChD,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAG/C,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC5B,SAAS;YACT,SAAS,EAAE,eAAe;SAC3B,CAAC;KACH,CAAC,CAAC;IACH,MAAM,QAAQ,GAAsB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IAE9D,IAAI,YAAY,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAgB,CAAC;IACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/access-control/auth.ts"],"names":[],"mappings":";;;AAsBA,oCAiDC;AArEY,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAoBlD,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,SAAkB,EAClB,WAAyD;IAGzD,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAG5C,MAAM,iBAAiB,GAAG,MAAM,KAAK,CACnC,GAAG,MAAM,0BAA0B,SAAS,CAAC,QAAQ,EAAE,EAAE,CAC1D,CAAC;IACF,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GACxB,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAEjC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAGD,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAChD,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAG/C,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC5B,SAAS;YACT,SAAS,EAAE,eAAe;SAC3B,CAAC;KACH,CAAC,CAAC;IACH,MAAM,QAAQ,GAAsB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IAE9D,IAAI,YAAY,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAgB,CAAC;IACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/access-control/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAQD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,wBAAwB,CAAC,CA0BnC;AA6CD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CA6ClB"}
1
+ {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/access-control/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAQD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,wBAAwB,CAAC,CA0BnC;AASD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAqBlB"}
@@ -23,30 +23,9 @@ async function getPermissionStatus(rpcUrl, publicKey) {
23
23
  throw new Error(`Failed to get permission status: ${error instanceof Error ? error.message : String(error)}`);
24
24
  }
25
25
  }
26
- async function forcePermissionUpdate(rpcUrl, publicKey) {
27
- const [baseUrl, token] = rpcUrl.replace("/?", "?").split("?");
28
- let url;
29
- if (token) {
30
- url = `${baseUrl}/permission/force-update?${token}&pubkey=${publicKey.toString()}`;
31
- }
32
- else {
33
- url = `${baseUrl}/permission/force-update?pubkey=${publicKey.toString()}`;
34
- }
35
- try {
36
- const forceUpdateResponse = await fetch(url);
37
- if (!forceUpdateResponse.ok) {
38
- throw new Error(`Force permission update request failed: ${forceUpdateResponse.statusText}`);
39
- }
40
- return true;
41
- }
42
- catch (error) {
43
- console.error(`Failed to force permission update: ${error instanceof Error ? error.message : String(error)}`);
44
- return false;
45
- }
46
- }
47
26
  async function waitUntilPermissionActive(rpcUrl, publicKey, timeout) {
48
27
  const timeoutMs = timeout ?? 5000;
49
- let startTime = Date.now();
28
+ const startTime = Date.now();
50
29
  while (Date.now() - startTime < timeoutMs) {
51
30
  try {
52
31
  const { authorizedUsers } = await getPermissionStatus(rpcUrl, publicKey);
@@ -61,24 +40,6 @@ async function waitUntilPermissionActive(rpcUrl, publicKey, timeout) {
61
40
  setTimeout(resolve, 400);
62
41
  });
63
42
  }
64
- const forceUpdateSuccess = await forcePermissionUpdate(rpcUrl, publicKey);
65
- if (forceUpdateSuccess) {
66
- startTime = Date.now();
67
- while (Date.now() - startTime < timeoutMs) {
68
- try {
69
- const { authorizedUsers } = await getPermissionStatus(rpcUrl, publicKey);
70
- if (authorizedUsers && authorizedUsers.length > 0) {
71
- return true;
72
- }
73
- }
74
- catch (error) {
75
- console.error(error);
76
- }
77
- await new Promise((resolve) => {
78
- setTimeout(resolve, 400);
79
- });
80
- }
81
- }
82
43
  return false;
83
44
  }
84
45
  //# sourceMappingURL=permission.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/access-control/permission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/access-control/permission.ts"],"names":[],"mappings":";;AAYA,kDA6BC;AASD,8DAyBC;AA/DM,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,SAAkB;IAIlB,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9D,IAAI,GAAG,CAAC;IACR,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,GAAG,GAAG,OAAO,eAAe,KAAK,WAAW,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,GAAG,OAAO,sBAAsB,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,wBAAwB,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,qCAAqC,wBAAwB,CAAC,UAAU,EAAE,CAC3E,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GACZ,MAAM,wBAAwB,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7F,CAAC;IACJ,CAAC;AACH,CAAC;AASM,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,SAAkB,EAClB,OAAgB;IAEhB,MAAM,SAAS,GAAG,OAAO,IAAI,IAAI,CAAC;IAGlC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACzE,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicblock-labs/ephemeral-rollups-kit",
3
- "version": "0.6.5",
3
+ "version": "0.7.2",
4
4
  "author": "MagicBlock Labs",
5
5
  "license": "MIT",
6
6
  "publishConfig": {