@lowerdeck/sign 1.0.3 → 1.0.4

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/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "@lowerdeck/sign",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
+ "files": [
8
+ "src/**",
9
+ "dist/**",
10
+ "README.md",
11
+ "package.json"
12
+ ],
7
13
  "author": "Tobias Herber",
8
14
  "license": "Apache 2",
9
15
  "type": "module",
@@ -21,15 +27,15 @@
21
27
  "scripts": {
22
28
  "test": "vitest run --passWithNoTests",
23
29
  "lint": "prettier src/**/*.ts --check",
24
- "build": "microbundle"
30
+ "build": "rm -rf ./dist && microbundle"
25
31
  },
26
32
  "dependencies": {
27
- "@lowerdeck/base62": "^1.0.3",
28
- "@lowerdeck/id": "^1.0.4"
33
+ "@lowerdeck/base62": "^1.0.4",
34
+ "@lowerdeck/id": "^1.0.5"
29
35
  },
30
36
  "devDependencies": {
31
37
  "microbundle": "^0.15.1",
32
- "@lowerdeck/tsconfig": "^1.0.0",
38
+ "@lowerdeck/tsconfig": "^1.0.1",
33
39
  "typescript": "5.8.2",
34
40
  "vitest": "^3.1.2"
35
41
  }
@@ -1,13 +0,0 @@
1
-
2
- $ microbundle
3
- No name was provided for external module '@lowerdeck/base62' in output.globals – guessing 'base62'
4
- No name was provided for external module '@lowerdeck/id' in output.globals – guessing 'id'
5
- Build "@lowerdeck/sign" to dist:
6
- 683 B: index.cjs.gz
7
- 608 B: index.cjs.br
8
- 581 B: index.module.js.gz
9
- 532 B: index.module.js.br
10
- 694 B: index.module.js.gz
11
- 628 B: index.module.js.br
12
- 776 B: index.umd.js.gz
13
- 700 B: index.umd.js.br
@@ -1,73 +0,0 @@
1
-
2
- $ vitest run --passWithNoTests
3
- [?25l
4
-  RUN  v3.2.4 /Users/tobias/code/metorial/metorial-enterprise/oss/src/packages/backend/sign
5
-
6
- [?2026h
7
-  ❯ src/sign.test.ts [queued]
8
-
9
-  Test Files 0 passed (1)
10
-  Tests 0 passed (0)
11
-  Start at 10:23:52
12
-  Duration 101ms
13
- [?2026l[?2026h
14
-  ❯ src/sign.test.ts 1/4
15
-
16
-  Test Files 0 passed (1)
17
-  Tests 1 passed (4)
18
-  Start at 10:23:52
19
-  Duration 306ms
20
- [?2026l[?2026h
21
-  ❯ src/sign.test.ts 1/4
22
-
23
-  Test Files 0 passed (1)
24
-  Tests 1 passed (4)
25
-  Start at 10:23:52
26
-  Duration 910ms
27
- [?2026l[?2026h
28
-  ❯ src/sign.test.ts 1/4
29
-
30
-  Test Files 0 passed (1)
31
-  Tests 1 passed (4)
32
-  Start at 10:23:52
33
-  Duration 1.92s
34
- [?2026l[?2026h
35
-  ❯ src/sign.test.ts 2/4
36
-
37
-  Test Files 0 passed (1)
38
-  Tests 2 passed (4)
39
-  Start at 10:23:52
40
-  Duration 2.22s
41
- [?2026l[?2026h
42
-  ❯ src/sign.test.ts 2/4
43
-
44
-  Test Files 0 passed (1)
45
-  Tests 2 passed (4)
46
-  Start at 10:23:52
47
-  Duration 2.93s
48
- [?2026l[?2026h
49
-  ❯ src/sign.test.ts 2/4
50
-
51
-  Test Files 0 passed (1)
52
-  Tests 2 passed (4)
53
-  Start at 10:23:52
54
-  Duration 3.94s
55
- [?2026l[?2026h
56
-  ❯ src/sign.test.ts 3/4
57
-
58
-  Test Files 0 passed (1)
59
-  Tests 3 passed (4)
60
-  Start at 10:23:52
61
-  Duration 4.24s
62
- [?2026l ✓ src/sign.test.ts (4 tests) 4008ms
63
- ✓ sign > sign + verify 3ms
64
- ✓ sign > expired  2002ms
65
- ✓ sign > acceptExpired  2003ms
66
- ✓ sign > start with prefix 0ms
67
-
68
-  Test Files  1 passed (1)
69
-  Tests  4 passed (4)
70
-  Start at  10:23:52
71
-  Duration  4.31s (transform 77ms, setup 0ms, collect 96ms, tests 4.01s, environment 0ms, prepare 53ms)
72
-
73
- [?25h
package/CHANGELOG.md DELETED
@@ -1,28 +0,0 @@
1
- # @lowerdeck/sign
2
-
3
- ## 1.0.3
4
-
5
- ### Patch Changes
6
-
7
- - Fix default entry point
8
- - Updated dependencies
9
- - @lowerdeck/base62@1.0.3
10
- - @lowerdeck/id@1.0.4
11
-
12
- ## 1.0.2
13
-
14
- ### Patch Changes
15
-
16
- - update versions
17
- - Updated dependencies
18
- - @lowerdeck/base62@1.0.2
19
- - @lowerdeck/id@1.0.3
20
-
21
- ## 1.0.1
22
-
23
- ### Patch Changes
24
-
25
- - Fix exports
26
- - Updated dependencies
27
- - @lowerdeck/base62@1.0.1
28
- - @lowerdeck/id@1.0.1
@@ -1,2 +0,0 @@
1
- import{base62 as e}from"@lowerdeck/base62";import{generatePlainId as t}from"@lowerdeck/id";let r=new Map,a=async e=>{if(r.has(e))return r.get(e);let t=(new TextEncoder).encode(e),a=await crypto.subtle.importKey("raw",t,{name:"HMAC",hash:"SHA-512"},!0,["sign","verify"]);return r.set(e,a),a},i=e=>parseInt(e,36),n=e=>(new TextEncoder).encode(e),s=r=>({sign:async({data:i,expirationMs:s=r.expirationMs})=>{let o=await a(r.key),c=Date.now()+s,y=t(10),w=JSON.stringify([y,i,c]),p=await crypto.subtle.sign("HMAC",o,n(w)),d=e.encode(new Uint8Array(p));return`${r.prefix}${d}_${(e=>e.toString(36))(c)}_${y}`},verify:async({data:t,signature:s,acceptExpired:o=!1})=>{let c=await a(r.key),y=s.slice(r.prefix.length),[w,p,d]=y.split("_"),l=e.decodeRaw(w),f=JSON.stringify([d,t,i(p)]);return!!await crypto.subtle.verify("HMAC",c,l,n(f))&&(!!o||Date.now()<i(p))}}),o={sign:async(t,r)=>{let i=await crypto.subtle.sign("HMAC",await a(r),n(t));return e.encode(new Uint8Array(i))},verify:async(t,r,i)=>{let s=e.decodeRaw(r);return crypto.subtle.verify("HMAC",await a(i),s,n(t))}};export{s as signature,o as signatureBasic};
2
- //# sourceMappingURL=index.modern.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/sign.ts"],"sourcesContent":["import { base62 } from '@lowerdeck/base62';\nimport { generatePlainId } from '@lowerdeck/id';\n\nlet importedKeys = new Map<string, CryptoKey>();\nlet importKey = async (keyStr: string) => {\n if (importedKeys.has(keyStr)) return importedKeys.get(keyStr)!;\n\n let encoder = new TextEncoder();\n let secretKeyData = encoder.encode(keyStr);\n let ck = await crypto.subtle.importKey(\n 'raw',\n secretKeyData,\n { name: 'HMAC', hash: 'SHA-512' },\n true,\n ['sign', 'verify']\n );\n\n importedKeys.set(keyStr, ck);\n\n return ck;\n};\n\nlet exp = {\n stringify: (expiry: number) => expiry.toString(36),\n parse: (expiry: string) => parseInt(expiry, 36)\n};\n\nlet encode = (data: string) => new TextEncoder().encode(data);\n\nexport let signature = (opts: { prefix: string; expirationMs: number; key: string }) => ({\n sign: async ({\n data,\n expirationMs = opts.expirationMs\n }: {\n data: string;\n\n expirationMs?: number;\n }) => {\n let key = await importKey(opts.key);\n let expiry = Date.now() + expirationMs;\n\n let id = generatePlainId(10);\n\n let dataToAuthenticate = JSON.stringify([id, data, expiry]);\n let signature = await crypto.subtle.sign('HMAC', key, encode(dataToAuthenticate));\n\n let hmac = base62.encode(new Uint8Array(signature));\n\n return `${opts.prefix}${hmac}_${exp.stringify(expiry)}_${id}`;\n },\n\n verify: async ({\n data,\n signature,\n acceptExpired = false\n }: {\n data: string;\n signature: string;\n acceptExpired?: boolean;\n }) => {\n let key = await importKey(opts.key);\n\n let sigStr = signature.slice(opts.prefix.length);\n let [encodedHmac, expiry, id] = sigStr.split('_');\n\n let hmac = base62.decodeRaw(encodedHmac);\n\n let dataToAuthenticate = JSON.stringify([id, data, exp.parse(expiry)]);\n\n let isValid = await crypto.subtle.verify('HMAC', key, hmac, encode(dataToAuthenticate));\n\n if (!isValid) return false;\n if (acceptExpired) return true;\n\n return Date.now() < exp.parse(expiry);\n }\n});\n\nexport let signatureBasic = {\n sign: async (data: string, key: string) => {\n let signature = await crypto.subtle.sign('HMAC', await importKey(key), encode(data));\n let hmac = base62.encode(new Uint8Array(signature));\n return hmac;\n },\n\n verify: async (data: string, signature: string, key: string) => {\n let hmac = base62.decodeRaw(signature);\n return crypto.subtle.verify('HMAC', await importKey(key), hmac, encode(data));\n }\n};\n"],"names":["importedKeys","Map","importKey","async","has","keyStr","get","secretKeyData","TextEncoder","encode","ck","crypto","subtle","name","hash","set","exp","expiry","parseInt","data","signature","opts","sign","expirationMs","key","Date","now","id","generatePlainId","dataToAuthenticate","JSON","stringify","hmac","base62","Uint8Array","prefix","toString","verify","acceptExpired","sigStr","slice","length","encodedHmac","split","decodeRaw","signatureBasic"],"mappings":"2FAGA,IAAIA,EAAe,IAAIC,IACnBC,EAAYC,UACd,GAAIH,EAAaI,IAAIC,GAAS,OAAOL,EAAaM,IAAID,GAEtD,IACIE,GADU,IAAIC,aACUC,OAAOJ,GAC/BK,QAAWC,OAAOC,OAAOV,UAC3B,MACAK,EACA,CAAEM,KAAM,OAAQC,KAAM,YACtB,EACA,CAAC,OAAQ,WAKX,OAFAd,EAAae,IAAIV,EAAQK,GAElBA,GAGLM,EAEMC,GAAmBC,SAASD,EAAQ,IAG1CR,EAAUU,IAAiB,IAAIX,aAAcC,OAAOU,GAE7CC,EAAaC,IAAiE,CACvFC,KAAMnB,OACJgB,OACAI,aAAAA,EAAeF,EAAKE,iBAMpB,IAAIC,QAAYtB,EAAUmB,EAAKG,KAC3BP,EAASQ,KAAKC,MAAQH,EAEtBI,EAAKC,EAAgB,IAErBC,EAAqBC,KAAKC,UAAU,CAACJ,EAAIR,EAAMF,IAC/CG,QAAkBT,OAAOC,OAAOU,KAAK,OAAQE,EAAKf,EAAOoB,IAEzDG,EAAOC,EAAOxB,OAAO,IAAIyB,WAAWd,IAExC,MAAO,GAAGC,EAAKc,SAASH,KAzBdf,IAAmBA,EAAOmB,SAAS,IAyBbpB,CAAcC,MAAWU,KAG3DU,OAAQlC,OACNgB,OACAC,YACAkB,cAAAA,GAAgB,MAMhB,IAAId,QAAYtB,EAAUmB,EAAKG,KAE3Be,EAASnB,EAAUoB,MAAMnB,EAAKc,OAAOM,SACpCC,EAAazB,EAAQU,GAAMY,EAAOI,MAAM,KAEzCX,EAAOC,EAAOW,UAAUF,GAExBb,EAAqBC,KAAKC,UAAU,CAACJ,EAAIR,EAAMH,EAAUC,KAI7D,cAFoBN,OAAOC,OAAOyB,OAAO,OAAQb,EAAKQ,EAAMvB,EAAOoB,QAG/DS,GAEGb,KAAKC,MAAQV,EAAUC,OAIvB4B,EAAiB,CAC1BvB,KAAMnB,MAAOgB,EAAcK,KACzB,IAAIJ,QAAkBT,OAAOC,OAAOU,KAAK,aAAcpB,EAAUsB,GAAMf,EAAOU,IAE9E,OADWc,EAAOxB,OAAO,IAAIyB,WAAWd,KAI1CiB,OAAQlC,MAAOgB,EAAcC,EAAmBI,KAC9C,IAAIQ,EAAOC,EAAOW,UAAUxB,GAC5B,OAAOT,OAAOC,OAAOyB,OAAO,aAAcnC,EAAUsB,GAAMQ,EAAMvB,EAAOU"}
package/tsconfig.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "$schema": "https://json.schemastore.org/tsconfig",
3
- "extends": "@lowerdeck/tsconfig/base.json",
4
- "exclude": ["dist"],
5
- "compilerOptions": {
6
- "outDir": "dist"
7
- }
8
- }