has_secure_passkey 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a34b7c6d4ffc77b13aacd463668ca6c79c21b056121096623afdbdd4807dba8
4
- data.tar.gz: e79dc7f12cdc8ccad5b146f0c66ee309eb14c344b2753c9d14dda0d709ed94f7
3
+ metadata.gz: 78d4e249f4c8a171cf5aa0675aeca1af7e2c7940ae5e2a06acaa852d9ecc6d4a
4
+ data.tar.gz: edfdfcf82e4cf95027ec39ba1e0f1260bb4ec96752ba6b467129d9f7e2d5512f
5
5
  SHA512:
6
- metadata.gz: a1d6994dbacce740e0d60ca49abea80b11502b01cea37db931d97e7359b698aef98316930a1d94b415dca0bae716f4a855d291e108bf027ac219d66fbe61bc0f
7
- data.tar.gz: f1fe81cc4733432980055924d86f8c8c0f601cf0fa6754caeb8febf5374a668de509880e6d814b1c4787261c104176be012abd94751bc8c1add8ad3f1a34727a
6
+ metadata.gz: 85f5b84cfcb632fcbae5ce4b1c23b6826274766983f61e9cea6ea172911677bbf53589a978658ef869e098f1205bf1355cbba1c1f4b3ae89f9ad6fa96d139576
7
+ data.tar.gz: 0e7f79e4a319b9f0d01a77d1960898e11264f40cc5cf1a62ccd0b6477f308565647a4d1fc11a536ae5229127f96c8e427ab03a458d4085d8c2bf17bb2d8add96
@@ -1,5 +1,5 @@
1
- import * as WebAuthnJSON from "../@github--webauthn-json"
2
- import { post } from "../@rails--request"
1
+ import * as WebAuthnJSON from "@github/webauthn-json"
2
+ import { post } from "@rails/request"
3
3
 
4
4
  export default class WebAuthn extends HTMLElement {
5
5
  static observedAttributes = ["action", "callback", "options"];
@@ -10,7 +10,6 @@ export default class WebAuthn extends HTMLElement {
10
10
 
11
11
  connectedCallback() {
12
12
  this.progressBar = Turbo.navigator.delegate.adapter.progressBar
13
- this.style.display = "none"
14
13
  this.setAttribute("data-turbo-temporary", 1)
15
14
  this.setAttribute("data-turbo-track", "reload")
16
15
  this.run()
@@ -12,28 +12,12 @@ var __export = (target, all) => {
12
12
  // app/assets/javascripts/@github--webauthn-json.js
13
13
  var exports__github_webauthn_json = {};
14
14
  __export(exports__github_webauthn_json, {
15
- supported: () => {
16
- {
17
- return supported;
18
- }
19
- },
20
- schema: () => {
21
- {
22
- return c;
23
- }
24
- },
25
- get: () => {
26
- {
27
- return get;
28
- }
29
- },
30
- create: () => {
31
- {
32
- return create;
33
- }
34
- }
15
+ supported: () => supported,
16
+ schema: () => c,
17
+ get: () => get,
18
+ create: () => create
35
19
  });
36
- var base64urlToBuffer = function(e) {
20
+ function base64urlToBuffer(e) {
37
21
  const r = "==".slice(0, (4 - e.length % 4) % 4);
38
22
  const t = e.replace(/-/g, "+").replace(/_/g, "/") + r;
39
23
  const n = atob(t);
@@ -42,8 +26,8 @@ var base64urlToBuffer = function(e) {
42
26
  for (let e2 = 0;e2 < n.length; e2++)
43
27
  o[e2] = n.charCodeAt(e2);
44
28
  return i;
45
- };
46
- var bufferToBase64url = function(e) {
29
+ }
30
+ function bufferToBase64url(e) {
47
31
  const r = new Uint8Array(e);
48
32
  let t = "";
49
33
  for (const e2 of r)
@@ -51,63 +35,40 @@ var bufferToBase64url = function(e) {
51
35
  const n = btoa(t);
52
36
  const i = n.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
53
37
  return i;
54
- };
55
- var convert = function(t, n, i) {
38
+ }
39
+ var e = "copy";
40
+ var r = "convert";
41
+ function convert(t, n, i) {
56
42
  if (n === e)
57
43
  return i;
58
44
  if (n === r)
59
45
  return t(i);
60
46
  if (n instanceof Array)
61
- return i.map((e) => convert(t, n[0], e));
47
+ return i.map((e2) => convert(t, n[0], e2));
62
48
  if (n instanceof Object) {
63
- const e = {};
64
- for (const [r, o] of Object.entries(n)) {
49
+ const e2 = {};
50
+ for (const [r2, o] of Object.entries(n)) {
65
51
  if (o.derive) {
66
- const e2 = o.derive(i);
67
- e2 !== undefined && (i[r] = e2);
52
+ const e3 = o.derive(i);
53
+ e3 !== undefined && (i[r2] = e3);
68
54
  }
69
- if (r in i)
70
- i[r] != null ? e[r] = convert(t, o.schema, i[r]) : e[r] = null;
55
+ if (r2 in i)
56
+ i[r2] != null ? e2[r2] = convert(t, o.schema, i[r2]) : e2[r2] = null;
71
57
  else if (o.required)
72
- throw new Error(`Missing key: ${r}`);
58
+ throw new Error(`Missing key: ${r2}`);
73
59
  }
74
- return e;
60
+ return e2;
75
61
  }
76
- };
77
- var derived = function(e, r) {
78
- return { required: true, schema: e, derive: r };
79
- };
80
- var required = function(e) {
81
- return { required: true, schema: e };
82
- };
83
- var optional = function(e) {
84
- return { required: false, schema: e };
85
- };
86
- var createRequestFromJSON = function(e) {
87
- return convert(base64urlToBuffer, o, e);
88
- };
89
- var createResponseToJSON = function(e) {
90
- return convert(bufferToBase64url, a, e);
91
- };
92
- async function create(e) {
93
- const r = await navigator.credentials.create(createRequestFromJSON(e));
94
- return createResponseToJSON(r);
95
62
  }
96
- var getRequestFromJSON = function(e) {
97
- return convert(base64urlToBuffer, u, e);
98
- };
99
- var getResponseToJSON = function(e) {
100
- return convert(bufferToBase64url, s, e);
101
- };
102
- async function get(e) {
103
- const r = await navigator.credentials.get(getRequestFromJSON(e));
104
- return getResponseToJSON(r);
63
+ function derived(e2, r2) {
64
+ return { required: true, schema: e2, derive: r2 };
65
+ }
66
+ function required(e2) {
67
+ return { required: true, schema: e2 };
68
+ }
69
+ function optional(e2) {
70
+ return { required: false, schema: e2 };
105
71
  }
106
- var supported = function() {
107
- return !!(navigator.credentials && navigator.credentials.create && navigator.credentials.get && window.PublicKeyCredential);
108
- };
109
- var e = "copy";
110
- var r = "convert";
111
72
  var t = { type: required(e), id: required(r), transports: optional(e) };
112
73
  var n = { appid: optional(e), appidExclude: optional(e), credProps: optional(e) };
113
74
  var i = { appid: optional(e), appidExclude: optional(e), credProps: optional(e) };
@@ -119,46 +80,31 @@ var a = { type: required(e), id: required(e), rawId: required(r), authenticatorA
119
80
  var u = { mediation: optional(e), publicKey: required({ challenge: required(r), timeout: optional(e), rpId: optional(e), allowCredentials: optional([t]), userVerification: optional(e), extensions: optional(n) }), signal: optional(e) };
120
81
  var s = { type: required(e), id: required(e), rawId: required(r), authenticatorAttachment: optional(e), response: required({ clientDataJSON: required(r), authenticatorData: required(r), signature: required(r), userHandle: required(r) }), clientExtensionResults: derived(i, (e2) => e2.getClientExtensionResults()) };
121
82
  var c = { credentialCreationOptions: o, publicKeyCredentialWithAttestation: a, credentialRequestOptions: u, publicKeyCredentialWithAssertion: s };
83
+ function createRequestFromJSON(e2) {
84
+ return convert(base64urlToBuffer, o, e2);
85
+ }
86
+ function createResponseToJSON(e2) {
87
+ return convert(bufferToBase64url, a, e2);
88
+ }
89
+ async function create(e2) {
90
+ const r2 = await navigator.credentials.create(createRequestFromJSON(e2));
91
+ return createResponseToJSON(r2);
92
+ }
93
+ function getRequestFromJSON(e2) {
94
+ return convert(base64urlToBuffer, u, e2);
95
+ }
96
+ function getResponseToJSON(e2) {
97
+ return convert(bufferToBase64url, s, e2);
98
+ }
99
+ async function get(e2) {
100
+ const r2 = await navigator.credentials.get(getRequestFromJSON(e2));
101
+ return getResponseToJSON(r2);
102
+ }
103
+ function supported() {
104
+ return !!(navigator.credentials && navigator.credentials.create && navigator.credentials.get && window.PublicKeyCredential);
105
+ }
122
106
 
123
107
  // app/assets/javascripts/@rails--request.js
124
- var getCookie = function(t2) {
125
- const e2 = document.cookie ? document.cookie.split("; ") : [];
126
- const n2 = `${encodeURIComponent(t2)}=`;
127
- const s2 = e2.find((t3) => t3.startsWith(n2));
128
- if (s2) {
129
- const t3 = s2.split("=").slice(1).join("=");
130
- if (t3)
131
- return decodeURIComponent(t3);
132
- }
133
- };
134
- var compact = function(t2) {
135
- const e2 = {};
136
- for (const n2 in t2) {
137
- const s2 = t2[n2];
138
- s2 !== undefined && (e2[n2] = s2);
139
- }
140
- return e2;
141
- };
142
- var metaContent = function(t2) {
143
- const e2 = document.head.querySelector(`meta[name="${t2}"]`);
144
- return e2 && e2.content;
145
- };
146
- var stringEntriesFromFormData = function(t2) {
147
- return [...t2].reduce((t3, [e2, n2]) => t3.concat(typeof n2 === "string" ? [[e2, n2]] : []), []);
148
- };
149
- var mergeEntries = function(t2, e2) {
150
- for (const [n2, s2] of e2)
151
- if (!(s2 instanceof window.File))
152
- if (t2.has(n2) && !n2.includes("[]")) {
153
- t2.delete(n2);
154
- t2.set(n2, s2);
155
- } else
156
- t2.append(n2, s2);
157
- };
158
- async function post(t2, e2) {
159
- const n2 = new FetchRequest("post", t2, e2);
160
- return n2.perform();
161
- }
162
108
  class FetchResponse {
163
109
  constructor(t2) {
164
110
  this.response = t2;
@@ -233,6 +179,40 @@ class RequestInterceptor {
233
179
  this.interceptor = undefined;
234
180
  }
235
181
  }
182
+ function getCookie(t2) {
183
+ const e2 = document.cookie ? document.cookie.split("; ") : [];
184
+ const n2 = `${encodeURIComponent(t2)}=`;
185
+ const s2 = e2.find((t3) => t3.startsWith(n2));
186
+ if (s2) {
187
+ const t3 = s2.split("=").slice(1).join("=");
188
+ if (t3)
189
+ return decodeURIComponent(t3);
190
+ }
191
+ }
192
+ function compact(t2) {
193
+ const e2 = {};
194
+ for (const n2 in t2) {
195
+ const s2 = t2[n2];
196
+ s2 !== undefined && (e2[n2] = s2);
197
+ }
198
+ return e2;
199
+ }
200
+ function metaContent(t2) {
201
+ const e2 = document.head.querySelector(`meta[name="${t2}"]`);
202
+ return e2 && e2.content;
203
+ }
204
+ function stringEntriesFromFormData(t2) {
205
+ return [...t2].reduce((t3, [e2, n2]) => t3.concat(typeof n2 === "string" ? [[e2, n2]] : []), []);
206
+ }
207
+ function mergeEntries(t2, e2) {
208
+ for (const [n2, s2] of e2)
209
+ if (!(s2 instanceof window.File))
210
+ if (t2.has(n2) && !n2.includes("[]")) {
211
+ t2.delete(n2);
212
+ t2.set(n2, s2);
213
+ } else
214
+ t2.append(n2, s2);
215
+ }
236
216
 
237
217
  class FetchRequest {
238
218
  constructor(t2, e2, n2 = {}) {
@@ -334,6 +314,10 @@ class FetchRequest {
334
314
  return e2 && !t2 ? JSON.stringify(this.body) : this.body;
335
315
  }
336
316
  }
317
+ async function post(t2, e2) {
318
+ const n2 = new FetchRequest("post", t2, e2);
319
+ return n2.perform();
320
+ }
337
321
 
338
322
  // app/assets/javascripts/components/web_authn.js
339
323
  class WebAuthn extends HTMLElement {
@@ -343,7 +327,6 @@ class WebAuthn extends HTMLElement {
343
327
  }
344
328
  connectedCallback() {
345
329
  this.progressBar = Turbo.navigator.delegate.adapter.progressBar;
346
- this.style.display = "none";
347
330
  this.setAttribute("data-turbo-temporary", 1);
348
331
  this.setAttribute("data-turbo-track", "reload");
349
332
  this.run();
@@ -1,3 +1,3 @@
1
1
  module HasSecurePasskey
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_secure_passkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Pezza
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2024-11-04 00:00:00.000000000 Z
10
+ date: 2024-11-07 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rails
@@ -46,8 +46,6 @@ files:
46
46
  - MIT-LICENSE
47
47
  - README.md
48
48
  - Rakefile
49
- - app/assets/javascripts/@github--webauthn-json.js
50
- - app/assets/javascripts/@rails--request.js
51
49
  - app/assets/javascripts/components/has_secure_passkey.js
52
50
  - app/assets/javascripts/components/web_authn.js
53
51
  - app/assets/javascripts/has_secure_passkey.js
@@ -1 +0,0 @@
1
- function base64urlToBuffer(e){const r="==".slice(0,(4-e.length%4)%4);const t=e.replace(/-/g,"+").replace(/_/g,"/")+r;const n=atob(t);const i=new ArrayBuffer(n.length);const o=new Uint8Array(i);for(let e=0;e<n.length;e++)o[e]=n.charCodeAt(e);return i}function bufferToBase64url(e){const r=new Uint8Array(e);let t="";for(const e of r)t+=String.fromCharCode(e);const n=btoa(t);const i=n.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"");return i}var e="copy";var r="convert";function convert(t,n,i){if(n===e)return i;if(n===r)return t(i);if(n instanceof Array)return i.map((e=>convert(t,n[0],e)));if(n instanceof Object){const e={};for(const[r,o]of Object.entries(n)){if(o.derive){const e=o.derive(i);void 0!==e&&(i[r]=e)}if(r in i)null!=i[r]?e[r]=convert(t,o.schema,i[r]):e[r]=null;else if(o.required)throw new Error(`Missing key: ${r}`)}return e}}function derived(e,r){return{required:true,schema:e,derive:r}}function required(e){return{required:true,schema:e}}function optional(e){return{required:false,schema:e}}var t={type:required(e),id:required(r),transports:optional(e)};var n={appid:optional(e),appidExclude:optional(e),credProps:optional(e)};var i={appid:optional(e),appidExclude:optional(e),credProps:optional(e)};var o={publicKey:required({rp:required(e),user:required({id:required(r),name:required(e),displayName:required(e)}),challenge:required(r),pubKeyCredParams:required(e),timeout:optional(e),excludeCredentials:optional([t]),authenticatorSelection:optional(e),attestation:optional(e),extensions:optional(n)}),signal:optional(e)};var a={type:required(e),id:required(e),rawId:required(r),authenticatorAttachment:optional(e),response:required({clientDataJSON:required(r),attestationObject:required(r),transports:derived(e,(e=>{var r;return(null==(r=e.getTransports)?void 0:r.call(e))||[]}))}),clientExtensionResults:derived(i,(e=>e.getClientExtensionResults()))};var u={mediation:optional(e),publicKey:required({challenge:required(r),timeout:optional(e),rpId:optional(e),allowCredentials:optional([t]),userVerification:optional(e),extensions:optional(n)}),signal:optional(e)};var s={type:required(e),id:required(e),rawId:required(r),authenticatorAttachment:optional(e),response:required({clientDataJSON:required(r),authenticatorData:required(r),signature:required(r),userHandle:required(r)}),clientExtensionResults:derived(i,(e=>e.getClientExtensionResults()))};var c={credentialCreationOptions:o,publicKeyCredentialWithAttestation:a,credentialRequestOptions:u,publicKeyCredentialWithAssertion:s};function createRequestFromJSON(e){return convert(base64urlToBuffer,o,e)}function createResponseToJSON(e){return convert(bufferToBase64url,a,e)}async function create(e){const r=await navigator.credentials.create(createRequestFromJSON(e));return createResponseToJSON(r)}function getRequestFromJSON(e){return convert(base64urlToBuffer,u,e)}function getResponseToJSON(e){return convert(bufferToBase64url,s,e)}async function get(e){const r=await navigator.credentials.get(getRequestFromJSON(e));return getResponseToJSON(r)}function supported(){return!!(navigator.credentials&&navigator.credentials.create&&navigator.credentials.get&&window.PublicKeyCredential)}export{create,get,c as schema,supported};
@@ -1,2 +0,0 @@
1
- class FetchResponse{constructor(t){this.response=t}get statusCode(){return this.response.status}get redirected(){return this.response.redirected}get ok(){return this.response.ok}get unauthenticated(){return this.statusCode===401}get unprocessableEntity(){return this.statusCode===422}get authenticationURL(){return this.response.headers.get("WWW-Authenticate")}get contentType(){const t=this.response.headers.get("Content-Type")||"";return t.replace(/;.*$/,"")}get headers(){return this.response.headers}get html(){return this.contentType.match(/^(application|text)\/(html|xhtml\+xml)$/)?this.text:Promise.reject(new Error(`Expected an HTML response but got "${this.contentType}" instead`))}get json(){return this.contentType.match(/^application\/.*json$/)?this.responseJson||(this.responseJson=this.response.json()):Promise.reject(new Error(`Expected a JSON response but got "${this.contentType}" instead`))}get text(){return this.responseText||(this.responseText=this.response.text())}get isTurboStream(){return this.contentType.match(/^text\/vnd\.turbo-stream\.html/)}get isScript(){return this.contentType.match(/\b(?:java|ecma)script\b/)}async renderTurboStream(){if(!this.isTurboStream)return Promise.reject(new Error(`Expected a Turbo Stream response but got "${this.contentType}" instead`));window.Turbo?await window.Turbo.renderStreamMessage(await this.text):console.warn("You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js")}async activeScript(){if(!this.isScript)return Promise.reject(new Error(`Expected a Script response but got "${this.contentType}" instead`));{const t=document.createElement("script");const e=document.querySelector("meta[name=csp-nonce]");const n=e&&e.content;n&&t.setAttribute("nonce",n);t.innerHTML=await this.text;document.body.appendChild(t)}}}class RequestInterceptor{static register(t){this.interceptor=t}static get(){return this.interceptor}static reset(){this.interceptor=void 0}}function getCookie(t){const e=document.cookie?document.cookie.split("; "):[];const n=`${encodeURIComponent(t)}=`;const s=e.find((t=>t.startsWith(n)));if(s){const t=s.split("=").slice(1).join("=");if(t)return decodeURIComponent(t)}}function compact(t){const e={};for(const n in t){const s=t[n];s!==void 0&&(e[n]=s)}return e}function metaContent(t){const e=document.head.querySelector(`meta[name="${t}"]`);return e&&e.content}function stringEntriesFromFormData(t){return[...t].reduce(((t,[e,n])=>t.concat(typeof n==="string"?[[e,n]]:[])),[])}function mergeEntries(t,e){for(const[n,s]of e)if(!(s instanceof window.File))if(t.has(n)&&!n.includes("[]")){t.delete(n);t.set(n,s)}else t.append(n,s)}class FetchRequest{constructor(t,e,n={}){this.method=t;this.options=n;this.originalUrl=e.toString()}async perform(){try{const t=RequestInterceptor.get();t&&await t(this)}catch(t){console.error(t)}const t=this.responseKind==="turbo-stream"&&window.Turbo?window.Turbo.fetch:window.fetch;const e=new FetchResponse(await t(this.url,this.fetchOptions));if(e.unauthenticated&&e.authenticationURL)return Promise.reject(window.location.href=e.authenticationURL);e.isScript&&await e.activeScript();const n=e.ok||e.unprocessableEntity;n&&e.isTurboStream&&await e.renderTurboStream();return e}addHeader(t,e){const n=this.additionalHeaders;n[t]=e;this.options.headers=n}sameHostname(){if(!this.originalUrl.startsWith("http:"))return true;try{return new URL(this.originalUrl).hostname===window.location.hostname}catch(t){return true}}get fetchOptions(){return{method:this.method.toUpperCase(),headers:this.headers,body:this.formattedBody,signal:this.signal,credentials:this.credentials,redirect:this.redirect}}get headers(){const t={"X-Requested-With":"XMLHttpRequest","Content-Type":this.contentType,Accept:this.accept};this.sameHostname()&&(t["X-CSRF-Token"]=this.csrfToken);return compact(Object.assign(t,this.additionalHeaders))}get csrfToken(){return getCookie(metaContent("csrf-param"))||metaContent("csrf-token")}get contentType(){return this.options.contentType?this.options.contentType:this.body==null||this.body instanceof window.FormData?void 0:this.body instanceof window.File?this.body.type:"application/json"}get accept(){switch(this.responseKind){case"html":return"text/html, application/xhtml+xml";case"turbo-stream":return"text/vnd.turbo-stream.html, text/html, application/xhtml+xml";case"json":return"application/json, application/vnd.api+json";case"script":return"text/javascript, application/javascript";default:return"*/*"}}get body(){return this.options.body}get query(){const t=(this.originalUrl.split("?")[1]||"").split("#")[0];const e=new URLSearchParams(t);let n=this.options.query;n=n instanceof window.FormData?stringEntriesFromFormData(n):n instanceof window.URLSearchParams?n.entries():Object.entries(n||{});mergeEntries(e,n);const s=e.toString();return s.length>0?`?${s}`:""}get url(){return this.originalUrl.split("?")[0].split("#")[0]+this.query}get responseKind(){return this.options.responseKind||"html"}get signal(){return this.options.signal}get redirect(){return this.options.redirect||"follow"}get credentials(){return this.options.credentials||"same-origin"}get additionalHeaders(){return this.options.headers||{}}get formattedBody(){const t=Object.prototype.toString.call(this.body)==="[object String]";const e=this.headers["Content-Type"]==="application/json";return e&&!t?JSON.stringify(this.body):this.body}}async function get(t,e){const n=new FetchRequest("get",t,e);return n.perform()}async function post(t,e){const n=new FetchRequest("post",t,e);return n.perform()}async function put(t,e){const n=new FetchRequest("put",t,e);return n.perform()}async function patch(t,e){const n=new FetchRequest("patch",t,e);return n.perform()}async function destroy(t,e){const n=new FetchRequest("delete",t,e);return n.perform()}export{FetchRequest,FetchResponse,RequestInterceptor,destroy,get,patch,post,put};
2
- //# sourceMappingURL=index.js.map