@fastly/remix-server-runtime 2.0.2 → 3.0.0-beta.0

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,3 +1,4 @@
1
- export declare function sign(value: string, secret: string): Promise<string>;
2
- export declare function unsign(signed: string, secret: string): Promise<string | false>;
1
+ import type { SignFunction, UnsignFunction } from "@remix-run/server-runtime";
2
+ export declare const sign: SignFunction;
3
+ export declare const unsign: UnsignFunction;
3
4
  //# sourceMappingURL=crypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAuBA,wBAAsB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAKvD;AAED,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,2BAW1D"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAI9E,eAAO,MAAM,IAAI,EAAE,YAUlB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,cAWpB,CAAC"}
@@ -1,54 +1,35 @@
1
1
  "use strict";
2
- /*
3
- * Copyright Fastly, Inc.
4
- * Licensed under the MIT license. See LICENSE file for details.
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
2
  Object.defineProperty(exports, "__esModule", { value: true });
30
3
  exports.unsign = exports.sign = void 0;
31
- const crypto = __importStar(require("crypto"));
32
4
  const encoder = new TextEncoder();
33
- async function calculateHash(value, secret) {
34
- const key = encoder.encode(secret);
35
- const signature = crypto.createHmac('sha256', key)
36
- .update(value)
37
- .digest();
38
- return btoa(String.fromCharCode(...new Uint8Array(signature))).replace(/=+$/, "");
39
- }
40
- async function sign(value, secret) {
41
- let hash = await calculateHash(value, secret);
42
- return value + '.' + hash;
43
- }
5
+ const sign = async (value, secret) => {
6
+ let key = await createKey(secret, ["sign"]);
7
+ let data = encoder.encode(value);
8
+ let signature = await crypto.subtle.sign("HMAC", key, data);
9
+ let hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(/=+$/, "");
10
+ return value + "." + hash;
11
+ };
44
12
  exports.sign = sign;
45
- async function unsign(signed, secret) {
13
+ const unsign = async (signed, secret) => {
46
14
  let index = signed.lastIndexOf(".");
47
15
  let value = signed.slice(0, index);
48
16
  let hash = signed.slice(index + 1);
49
- let expectedHash = await calculateHash(value, secret);
50
- const valid = hash === expectedHash;
17
+ let key = await createKey(secret, ["verify"]);
18
+ let data = encoder.encode(value);
19
+ let signature = byteStringToUint8Array(atob(hash));
20
+ let valid = await crypto.subtle.verify("HMAC", key, signature, data);
51
21
  return valid ? value : false;
52
- }
22
+ };
53
23
  exports.unsign = unsign;
24
+ async function createKey(secret, usages) {
25
+ let key = await crypto.subtle.importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, usages);
26
+ return key;
27
+ }
28
+ function byteStringToUint8Array(byteString) {
29
+ let array = new Uint8Array(byteString.length);
30
+ for (let i = 0; i < byteString.length; i++) {
31
+ array[i] = byteString.charCodeAt(i);
32
+ }
33
+ return array;
34
+ }
54
35
  //# sourceMappingURL=crypto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+CAAiC;AAEjC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,MAAc;IAExD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;SAC/C,MAAM,CAAC,KAAK,CAAC;SACb,MAAM,EAAE,CAAC;IAEZ,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CACpE,KAAK,EACL,EAAE,CACH,CAAC;AAEJ,CAAC;AAEM,KAAK,UAAU,IAAI,CAAC,KAAa,EAAE,MAAc;IAEtD,IAAI,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;AAE5B,CAAC;AALD,oBAKC;AAEM,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,MAAc;IAEzD,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnC,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,KAAK,YAAY,CAAC;IAEpC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAE/B,CAAC;AAXD,wBAWC","sourcesContent":["/*\n * Copyright Fastly, Inc.\n * Licensed under the MIT license. See LICENSE file for details.\n */\n\nimport * as crypto from 'crypto';\n\nconst encoder = new TextEncoder();\n\nasync function calculateHash(value: string, secret: string) {\n\n const key = encoder.encode(secret);\n const signature = crypto.createHmac('sha256', key)\n .update(value)\n .digest();\n\n return btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n \"\"\n );\n\n}\n\nexport async function sign(value: string, secret: string) {\n\n let hash = await calculateHash(value, secret);\n return value + '.' + hash;\n\n}\n\nexport async function unsign(signed: string, secret: string) {\n\n let index = signed.lastIndexOf(\".\");\n let value = signed.slice(0, index);\n\n let hash = signed.slice(index + 1);\n let expectedHash = await calculateHash(value, secret);\n const valid = hash === expectedHash;\n\n return valid ? value : false;\n\n}\n"]}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":";;;AAMA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAE3B,MAAM,IAAI,GAAiB,KAAK,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE;IACxE,IAAI,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5D,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CACxE,KAAK,EACL,EAAE,CACH,CAAC;IAEF,OAAO,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;AAC5B,CAAC,CAAC;AAVW,QAAA,IAAI,QAUf;AAEK,MAAM,MAAM,GAAmB,KAAK,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;IAC7E,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAEnC,IAAI,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,IAAI,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAErE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,CAAC,CAAC;AAXW,QAAA,MAAM,UAWjB;AAEF,KAAK,UAAU,SAAS,CACtB,MAAc,EACd,MAA2B;IAE3B,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACrC,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,MAAM,CACP,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAkB;IAChD,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACrC;IAED,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/*\n * Copyright Fastly, Inc.\n * Licensed under the MIT license. See LICENSE file for details.\n */\nimport type { SignFunction, UnsignFunction } from \"@remix-run/server-runtime\";\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value: string, secret: string) => {\n let key = await createKey(secret, [\"sign\"]);\n let data = encoder.encode(value);\n let signature = await crypto.subtle.sign(\"HMAC\", key, data);\n let hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n \"\"\n );\n\n return value + \".\" + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed: string, secret: string) => {\n let index = signed.lastIndexOf(\".\");\n let value = signed.slice(0, index);\n let hash = signed.slice(index + 1);\n\n let key = await createKey(secret, [\"verify\"]);\n let data = encoder.encode(value);\n let signature = byteStringToUint8Array(atob(hash));\n let valid = await crypto.subtle.verify(\"HMAC\", key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey[\"usages\"]\n): Promise<CryptoKey> {\n let key = await crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n usages\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n let array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastly/remix-server-runtime",
3
- "version": "2.0.2",
3
+ "version": "3.0.0-beta.0",
4
4
  "license": "MIT",
5
5
  "description": "Remix Runtime for Fastly Compute@Edge",
6
6
  "types": "./build/src/index.d.ts",
@@ -12,7 +12,7 @@
12
12
  "@remix-run/server-runtime": "^1.17.1"
13
13
  },
14
14
  "dependencies": {
15
- "@fastly/js-compute": "^2.0.0",
15
+ "@fastly/js-compute": "^2.5.0",
16
16
  "@remix-run/server-runtime": "^1.17.1"
17
17
  },
18
18
  "devDependencies": {