penpal 7.0.2 → 7.0.3

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.
@@ -93,11 +93,14 @@ class WindowMessenger {
93
93
  : allowedOrigin === origin || allowedOrigin === '*');
94
94
  };
95
95
  #getOriginForSendingMessage = (message) => {
96
+ // It's safe to send the SYN message to any origin because it doesn't contain
97
+ // anything sensitive. When Penpal receives a SYN message, the origin on
98
+ // the message (which we call the concrete origin) is validated against the
99
+ // configured allowed origins. All subsequent messages will be sent to the
100
+ // concrete origin.
101
+ // If you decide to change this, consider https://github.com/Aaronius/penpal/issues/103
96
102
  if ((0, guards_js_1.isSynMessage)(message)) {
97
- return this.#allowedOrigins.length > 1 ||
98
- this.#allowedOrigins[0] instanceof RegExp
99
- ? '*'
100
- : this.#allowedOrigins[0];
103
+ return '*';
101
104
  }
102
105
  if (!this.#concreteRemoteOrigin) {
103
106
  throw new PenpalBugError_js_1.default('Concrete remote origin not set');
package/dist/penpal.js CHANGED
@@ -858,11 +858,14 @@ var Penpal = (function () {
858
858
  : allowedOrigin === origin || allowedOrigin === '*');
859
859
  };
860
860
  #getOriginForSendingMessage = (message) => {
861
+ // It's safe to send the SYN message to any origin because it doesn't contain
862
+ // anything sensitive. When Penpal receives a SYN message, the origin on
863
+ // the message (which we call the concrete origin) is validated against the
864
+ // configured allowed origins. All subsequent messages will be sent to the
865
+ // concrete origin.
866
+ // If you decide to change this, consider https://github.com/Aaronius/penpal/issues/103
861
867
  if (isSynMessage(message)) {
862
- return this.#allowedOrigins.length > 1 ||
863
- this.#allowedOrigins[0] instanceof RegExp
864
- ? '*'
865
- : this.#allowedOrigins[0];
868
+ return '*';
866
869
  }
867
870
  if (!this.#concreteRemoteOrigin) {
868
871
  throw new PenpalBugError('Concrete remote origin not set');
@@ -1 +1 @@
1
- var Penpal=function(){"use strict";class e extends Error{code;constructor(e,t){super(t);this.name="PenpalError";this.code=e}}const t=t=>({name:t.name,message:t.message,stack:t.stack,penpalCode:t instanceof e?t.code:undefined});const s=({name:t,message:s,stack:n,penpalCode:r})=>{const a=r?new e(r,s):new Error(s);a.name=t;a.stack=n;return a};const n=Symbol("Reply");class r{value;transferables;#e=n;constructor(e,t){this.value=e;this.transferables=t?.transferables}}var a="penpal";const o=e=>typeof e==="object"&&e!==null;const i=e=>typeof e==="function";const l=e=>o(e)&&e.namespace===a;const d=e=>e.type==="SYN";const c=e=>e.type==="ACK1";const h=e=>e.type==="ACK2";const g=e=>e.type==="CALL";const u=e=>e.type==="REPLY";const p=e=>e.type==="DESTROY";const m=(e,t=[])=>{const s=[];for(const n of Object.keys(e)){const r=e[n];if(i(r)){s.push([...t,n])}else if(o(r)){s.push(...m(r,[...t,n]))}}return s};const f=(e,t)=>{const s=e.reduce(((e,t)=>o(e)?e[t]:undefined),t);return i(s)?s:undefined};const w=e=>e.join(".");const M=(e,s,n)=>({namespace:a,channel:e,type:"REPLY",callId:s,isError:true,...n instanceof Error?{value:t(n),isSerializedErrorInstance:true}:{value:n}});const v=(t,s,n,o)=>{let i=false;const l=async l=>{if(i){return}if(!g(l)){return}o?.(`Received ${w(l.methodPath)}() call`,l);const{methodPath:d,args:c,id:h}=l;let u;let p;try{const t=f(d,s);if(!t){throw new e("METHOD_NOT_FOUND",`Method \`${w(d)}\` is not found.`)}let o=await t(...c);if(o instanceof r){p=o.transferables;o=await o.value}u={namespace:a,channel:n,type:"REPLY",callId:h,value:o}}catch(e){u=M(n,h,e)}if(i){return}try{o?.(`Sending ${w(d)}() reply`,u);t.sendMessage(u,p)}catch(e){if(e.name==="DataCloneError"){u=M(n,h,e);o?.(`Sending ${w(d)}() reply`,u);t.sendMessage(u)}throw e}};t.addMessageHandler(l);return()=>{i=true;t.removeMessageHandler(l)}};var y=crypto.randomUUID?.bind(crypto)??(()=>new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-"));const E=Symbol("CallOptions");class C{transferables;timeout;#e=E;constructor(e){this.transferables=e?.transferables;this.timeout=e?.timeout}}const R=new Set(["apply","call","bind"]);const I=(e,t,s=[])=>new Proxy(s.length?()=>{}:Object.create(null),{get(n,r){if(r==="then"){return}if(s.length&&R.has(r)){return Reflect.get(n,r)}return I(e,t,[...s,r])},apply(t,n,r){return e(s,r)}});const O=t=>new e("CONNECTION_DESTROYED",`Method call ${w(t)}() failed due to destroyed connection`);const N=(t,n,r)=>{let o=false;const i=new Map;const l=e=>{if(!u(e)){return}const{callId:t,value:n,isError:a,isSerializedErrorInstance:o}=e;const l=i.get(t);if(!l){return}i.delete(t);r?.(`Received ${w(l.methodPath)}() call`,e);if(a){l.reject(o?s(n):n)}else{l.resolve(n)}};t.addMessageHandler(l);const d=I(((s,l)=>{if(o){throw O(s)}const d=y();const c=l[l.length-1];const h=c instanceof C;const{timeout:g,transferables:u}=h?c:{};const p=h?l.slice(0,-1):l;return new Promise(((o,l)=>{const c=g!==undefined?window.setTimeout((()=>{i.delete(d);l(new e("METHOD_CALL_TIMEOUT",`Method call ${w(s)}() timed out after ${g}ms`))}),g):undefined;i.set(d,{methodPath:s,resolve:o,reject:l,timeoutId:c});try{const e={namespace:a,channel:n,type:"CALL",id:d,methodPath:s,args:p};r?.(`Sending ${w(s)}() call`,e);t.sendMessage(e,u)}catch(t){l(new e("TRANSMISSION_FAILED",t.message))}}))}),r);const c=()=>{o=true;t.removeMessageHandler(l);for(const{methodPath:e,reject:t,timeoutId:s}of i.values()){clearTimeout(s);t(O(e))}i.clear()};return{remoteProxy:d,destroy:c}};const S=()=>{let e;let t;const s=new Promise(((s,n)=>{e=s;t=n}));return{promise:s,resolve:e,reject:t}};class A extends Error{constructor(e){super(`You've hit a bug in Penpal. Please file an issue with the following information: ${e}`)}}const P="deprecated-penpal";var k;(function(e){e["Call"]="call";e["Reply"]="reply";e["Syn"]="syn";e["SynAck"]="synAck";e["Ack"]="ack"})(k||(k={}));var b;(function(e){e["Fulfilled"]="fulfilled";e["Rejected"]="rejected"})(b||(b={}));const T=e=>o(e)&&"penpal"in e;const L=e=>e.split(".");const D=e=>e.join(".");const _=e=>new A(`Unexpected message to translate: ${JSON.stringify(e)}`);const F=e=>{if(e.penpal===k.Syn){return{namespace:a,channel:undefined,type:"SYN",participantId:P}}if(e.penpal===k.Ack){return{namespace:a,channel:undefined,type:"ACK2"}}if(e.penpal===k.Call){return{namespace:a,channel:undefined,type:"CALL",id:e.id,methodPath:L(e.methodName),args:e.args}}if(e.penpal===k.Reply){if(e.resolution===b.Fulfilled){return{namespace:a,channel:undefined,type:"REPLY",callId:e.id,value:e.returnValue}}else{return{namespace:a,channel:undefined,type:"REPLY",callId:e.id,isError:true,...e.returnValueIsError?{value:e.returnValue,isSerializedErrorInstance:true}:{value:e.returnValue}}}}throw _(e)};const U=e=>{if(c(e)){return{penpal:k.SynAck,methodNames:e.methodPaths.map(D)}}if(g(e)){return{penpal:k.Call,id:e.id,methodName:D(e.methodPath),args:e.args}}if(u(e)){if(e.isError){return{penpal:k.Reply,id:e.callId,resolution:b.Rejected,...e.isSerializedErrorInstance?{returnValue:e.value,returnValueIsError:true}:{returnValue:e.value}}}else{return{penpal:k.Reply,id:e.callId,resolution:b.Fulfilled,returnValue:e.value}}}throw _(e)};const H=({messenger:t,methods:s,timeout:n,channel:r,log:o})=>{const i=y();let l;const g=[];let u=false;const p=m(s);const{promise:f,resolve:w,reject:M}=S();const E=n!==undefined?setTimeout((()=>{M(new e("CONNECTION_TIMEOUT",`Connection timed out after ${n}ms`))}),n):undefined;const C=()=>{for(const e of g){e()}};const R=()=>{if(u){return}g.push(v(t,s,r,o));const{remoteProxy:e,destroy:n}=N(t,r,o);g.push(n);clearTimeout(E);u=true;w({remoteProxy:e,destroy:C})};const I=()=>{const s={namespace:a,type:"SYN",channel:r,participantId:i};o?.(`Sending handshake SYN`,s);try{t.sendMessage(s)}catch(t){M(new e("TRANSMISSION_FAILED",t.message))}};const O=s=>{o?.(`Received handshake SYN`,s);if(s.participantId===l&&l!==P){return}l=s.participantId;I();const n=i>l||l===P;if(!n){return}const d={namespace:a,channel:r,type:"ACK1",methodPaths:p};o?.(`Sending handshake ACK1`,d);try{t.sendMessage(d)}catch(t){M(new e("TRANSMISSION_FAILED",t.message));return}};const A=s=>{o?.(`Received handshake ACK1`,s);const n={namespace:a,channel:r,type:"ACK2"};o?.(`Sending handshake ACK2`,n);try{t.sendMessage(n)}catch(t){M(new e("TRANSMISSION_FAILED",t.message));return}R()};const k=e=>{o?.(`Received handshake ACK2`,e);R()};const b=e=>{if(d(e)){O(e)}if(c(e)){A(e)}if(h(e)){k(e)}};t.addMessageHandler(b);g.push((()=>t.removeMessageHandler(b)));I();return f};const j=e=>{let t=false;let s;return(...n)=>{if(!t){t=true;s=e(...n)}return s}};const Y=new WeakSet;const $=({messenger:t,methods:s={},timeout:n,channel:r,log:o})=>{if(!t){throw new e("INVALID_ARGUMENT","messenger must be defined")}if(Y.has(t)){throw new e("INVALID_ARGUMENT","A messenger can only be used for a single connection")}Y.add(t);const i=[t.destroy];const d=j((e=>{if(e){const e={namespace:a,channel:r,type:"DESTROY"};try{t.sendMessage(e)}catch(e){}}for(const e of i){e()}o?.("Connection destroyed")}));const c=e=>l(e)&&e.channel===r;const h=(async()=>{try{t.initialize({log:o,validateReceivedMessage:c});t.addMessageHandler((e=>{if(p(e)){d(false)}}));const{remoteProxy:e,destroy:a}=await H({messenger:t,methods:s,timeout:n,channel:r,log:o});i.push(a);return e}catch(e){d(true);throw e}})();return{promise:h,destroy:()=>{d(true)}}};class V{#t;#s;#n;#r;#a;#o=new Set;#i;#l=false;constructor({remoteWindow:t,allowedOrigins:s}){if(!t){throw new e("INVALID_ARGUMENT","remoteWindow must be defined")}this.#t=t;this.#s=s?.length?s:[window.origin]}initialize=({log:e,validateReceivedMessage:t})=>{this.#n=e;this.#r=t;window.addEventListener("message",this.#d)};sendMessage=(e,t)=>{if(d(e)){const s=this.#c(e);this.#t.postMessage(e,{targetOrigin:s,transfer:t});return}if(c(e)||this.#l){const s=this.#l?U(e):e;const n=this.#c(e);this.#t.postMessage(s,{targetOrigin:n,transfer:t});return}if(h(e)){const{port1:s,port2:n}=new MessageChannel;this.#i=s;s.addEventListener("message",this.#h);s.start();const r=[n,...t||[]];const a=this.#c(e);this.#t.postMessage(e,{targetOrigin:a,transfer:r});return}if(this.#i){this.#i.postMessage(e,{transfer:t});return}throw new A("Port is undefined")};addMessageHandler=e=>{this.#o.add(e)};removeMessageHandler=e=>{this.#o.delete(e)};destroy=()=>{window.removeEventListener("message",this.#d);this.#g();this.#o.clear()};#u=e=>this.#s.some((t=>t instanceof RegExp?t.test(e):t===e||t==="*"));#c=e=>{if(d(e)){return this.#s.length>1||this.#s[0]instanceof RegExp?"*":this.#s[0]}if(!this.#a){throw new A("Concrete remote origin not set")}return this.#a==="null"&&this.#s.includes("*")?"*":this.#a};#g=()=>{this.#i?.removeEventListener("message",this.#h);this.#i?.close();this.#i=undefined};#d=({source:e,origin:t,ports:s,data:n})=>{if(e!==this.#t){return}if(T(n)){this.#n?.("Please upgrade the child window to the latest version of Penpal.");this.#l=true;n=F(n)}if(!this.#r?.(n)){return}if(!this.#u(t)){this.#n?.(`Received a message from origin \`${t}\` which did not match `+`allowed origins \`[${this.#s.join(", ")}]\``);return}if(d(n)){this.#g();this.#a=t}if(h(n)&&!this.#l){this.#i=s[0];if(!this.#i){throw new A("No port received on ACK2")}this.#i.addEventListener("message",this.#h);this.#i.start()}for(const e of this.#o){e(n)}};#h=({data:e})=>{if(!this.#r?.(e)){return}for(const t of this.#o){t(e)}}}class W{#p;#r;#o=new Set;#i;constructor({worker:t}){if(!t){throw new e("INVALID_ARGUMENT","worker must be defined")}this.#p=t}initialize=({validateReceivedMessage:e})=>{this.#r=e;this.#p.addEventListener("message",this.#m)};sendMessage=(e,t)=>{if(d(e)||c(e)){this.#p.postMessage(e,{transfer:t});return}if(h(e)){const{port1:s,port2:n}=new MessageChannel;this.#i=s;s.addEventListener("message",this.#m);s.start();this.#p.postMessage(e,{transfer:[n,...t||[]]});return}if(this.#i){this.#i.postMessage(e,{transfer:t});return}throw new A("Port is undefined")};addMessageHandler=e=>{this.#o.add(e)};removeMessageHandler=e=>{this.#o.delete(e)};destroy=()=>{this.#p.removeEventListener("message",this.#m);this.#g();this.#o.clear()};#g=()=>{this.#i?.removeEventListener("message",this.#m);this.#i?.close();this.#i=undefined};#m=({ports:e,data:t})=>{if(!this.#r?.(t)){return}if(d(t)){this.#g()}if(h(t)){this.#i=e[0];if(!this.#i){throw new A("No port received on ACK2")}this.#i.addEventListener("message",this.#m);this.#i.start()}for(const e of this.#o){e(t)}}}class K{#i;#r;#o=new Set;constructor({port:t}){if(!t){throw new e("INVALID_ARGUMENT","port must be defined")}this.#i=t}initialize=({validateReceivedMessage:e})=>{this.#r=e;this.#i.addEventListener("message",this.#m);this.#i.start()};sendMessage=(e,t)=>{this.#i?.postMessage(e,{transfer:t})};addMessageHandler=e=>{this.#o.add(e)};removeMessageHandler=e=>{this.#o.delete(e)};destroy=()=>{this.#i.removeEventListener("message",this.#m);this.#i.close();this.#o.clear()};#m=({data:e})=>{if(!this.#r?.(e)){return}for(const t of this.#o){t(e)}}}const x={ConnectionDestroyed:"CONNECTION_DESTROYED",ConnectionTimeout:"CONNECTION_TIMEOUT",InvalidArgument:"INVALID_ARGUMENT",MethodCallTimeout:"METHOD_CALL_TIMEOUT",MethodNotFound:"METHOD_NOT_FOUND",TransmissionFailed:"TRANSMISSION_FAILED"};const z=e=>(...t)=>{console.log(`✍️ %c${e}%c`,"font-weight: bold;","",...t)};var G={connect:$,WindowMessenger:V,WorkerMessenger:W,PortMessenger:K,CallOptions:C,Reply:r,PenpalError:e,debug:z,ErrorCode:x};return G}();
1
+ var Penpal=function(){"use strict";class e extends Error{code;constructor(e,t){super(t);this.name="PenpalError";this.code=e}}const t=t=>({name:t.name,message:t.message,stack:t.stack,penpalCode:t instanceof e?t.code:undefined});const s=({name:t,message:s,stack:n,penpalCode:r})=>{const a=r?new e(r,s):new Error(s);a.name=t;a.stack=n;return a};const n=Symbol("Reply");class r{value;transferables;#e=n;constructor(e,t){this.value=e;this.transferables=t?.transferables}}var a="penpal";const o=e=>typeof e==="object"&&e!==null;const i=e=>typeof e==="function";const l=e=>o(e)&&e.namespace===a;const d=e=>e.type==="SYN";const c=e=>e.type==="ACK1";const h=e=>e.type==="ACK2";const g=e=>e.type==="CALL";const u=e=>e.type==="REPLY";const m=e=>e.type==="DESTROY";const p=(e,t=[])=>{const s=[];for(const n of Object.keys(e)){const r=e[n];if(i(r)){s.push([...t,n])}else if(o(r)){s.push(...p(r,[...t,n]))}}return s};const f=(e,t)=>{const s=e.reduce(((e,t)=>o(e)?e[t]:undefined),t);return i(s)?s:undefined};const M=e=>e.join(".");const w=(e,s,n)=>({namespace:a,channel:e,type:"REPLY",callId:s,isError:true,...n instanceof Error?{value:t(n),isSerializedErrorInstance:true}:{value:n}});const v=(t,s,n,o)=>{let i=false;const l=async l=>{if(i){return}if(!g(l)){return}o?.(`Received ${M(l.methodPath)}() call`,l);const{methodPath:d,args:c,id:h}=l;let u;let m;try{const t=f(d,s);if(!t){throw new e("METHOD_NOT_FOUND",`Method \`${M(d)}\` is not found.`)}let o=await t(...c);if(o instanceof r){m=o.transferables;o=await o.value}u={namespace:a,channel:n,type:"REPLY",callId:h,value:o}}catch(e){u=w(n,h,e)}if(i){return}try{o?.(`Sending ${M(d)}() reply`,u);t.sendMessage(u,m)}catch(e){if(e.name==="DataCloneError"){u=w(n,h,e);o?.(`Sending ${M(d)}() reply`,u);t.sendMessage(u)}throw e}};t.addMessageHandler(l);return()=>{i=true;t.removeMessageHandler(l)}};var y=crypto.randomUUID?.bind(crypto)??(()=>new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-"));const E=Symbol("CallOptions");class C{transferables;timeout;#e=E;constructor(e){this.transferables=e?.transferables;this.timeout=e?.timeout}}const R=new Set(["apply","call","bind"]);const I=(e,t,s=[])=>new Proxy(s.length?()=>{}:Object.create(null),{get(n,r){if(r==="then"){return}if(s.length&&R.has(r)){return Reflect.get(n,r)}return I(e,t,[...s,r])},apply(t,n,r){return e(s,r)}});const O=t=>new e("CONNECTION_DESTROYED",`Method call ${M(t)}() failed due to destroyed connection`);const N=(t,n,r)=>{let o=false;const i=new Map;const l=e=>{if(!u(e)){return}const{callId:t,value:n,isError:a,isSerializedErrorInstance:o}=e;const l=i.get(t);if(!l){return}i.delete(t);r?.(`Received ${M(l.methodPath)}() call`,e);if(a){l.reject(o?s(n):n)}else{l.resolve(n)}};t.addMessageHandler(l);const d=I(((s,l)=>{if(o){throw O(s)}const d=y();const c=l[l.length-1];const h=c instanceof C;const{timeout:g,transferables:u}=h?c:{};const m=h?l.slice(0,-1):l;return new Promise(((o,l)=>{const c=g!==undefined?window.setTimeout((()=>{i.delete(d);l(new e("METHOD_CALL_TIMEOUT",`Method call ${M(s)}() timed out after ${g}ms`))}),g):undefined;i.set(d,{methodPath:s,resolve:o,reject:l,timeoutId:c});try{const e={namespace:a,channel:n,type:"CALL",id:d,methodPath:s,args:m};r?.(`Sending ${M(s)}() call`,e);t.sendMessage(e,u)}catch(t){l(new e("TRANSMISSION_FAILED",t.message))}}))}),r);const c=()=>{o=true;t.removeMessageHandler(l);for(const{methodPath:e,reject:t,timeoutId:s}of i.values()){clearTimeout(s);t(O(e))}i.clear()};return{remoteProxy:d,destroy:c}};const S=()=>{let e;let t;const s=new Promise(((s,n)=>{e=s;t=n}));return{promise:s,resolve:e,reject:t}};class A extends Error{constructor(e){super(`You've hit a bug in Penpal. Please file an issue with the following information: ${e}`)}}const P="deprecated-penpal";var k;(function(e){e["Call"]="call";e["Reply"]="reply";e["Syn"]="syn";e["SynAck"]="synAck";e["Ack"]="ack"})(k||(k={}));var b;(function(e){e["Fulfilled"]="fulfilled";e["Rejected"]="rejected"})(b||(b={}));const T=e=>o(e)&&"penpal"in e;const L=e=>e.split(".");const D=e=>e.join(".");const _=e=>new A(`Unexpected message to translate: ${JSON.stringify(e)}`);const F=e=>{if(e.penpal===k.Syn){return{namespace:a,channel:undefined,type:"SYN",participantId:P}}if(e.penpal===k.Ack){return{namespace:a,channel:undefined,type:"ACK2"}}if(e.penpal===k.Call){return{namespace:a,channel:undefined,type:"CALL",id:e.id,methodPath:L(e.methodName),args:e.args}}if(e.penpal===k.Reply){if(e.resolution===b.Fulfilled){return{namespace:a,channel:undefined,type:"REPLY",callId:e.id,value:e.returnValue}}else{return{namespace:a,channel:undefined,type:"REPLY",callId:e.id,isError:true,...e.returnValueIsError?{value:e.returnValue,isSerializedErrorInstance:true}:{value:e.returnValue}}}}throw _(e)};const U=e=>{if(c(e)){return{penpal:k.SynAck,methodNames:e.methodPaths.map(D)}}if(g(e)){return{penpal:k.Call,id:e.id,methodName:D(e.methodPath),args:e.args}}if(u(e)){if(e.isError){return{penpal:k.Reply,id:e.callId,resolution:b.Rejected,...e.isSerializedErrorInstance?{returnValue:e.value,returnValueIsError:true}:{returnValue:e.value}}}else{return{penpal:k.Reply,id:e.callId,resolution:b.Fulfilled,returnValue:e.value}}}throw _(e)};const H=({messenger:t,methods:s,timeout:n,channel:r,log:o})=>{const i=y();let l;const g=[];let u=false;const m=p(s);const{promise:f,resolve:M,reject:w}=S();const E=n!==undefined?setTimeout((()=>{w(new e("CONNECTION_TIMEOUT",`Connection timed out after ${n}ms`))}),n):undefined;const C=()=>{for(const e of g){e()}};const R=()=>{if(u){return}g.push(v(t,s,r,o));const{remoteProxy:e,destroy:n}=N(t,r,o);g.push(n);clearTimeout(E);u=true;M({remoteProxy:e,destroy:C})};const I=()=>{const s={namespace:a,type:"SYN",channel:r,participantId:i};o?.(`Sending handshake SYN`,s);try{t.sendMessage(s)}catch(t){w(new e("TRANSMISSION_FAILED",t.message))}};const O=s=>{o?.(`Received handshake SYN`,s);if(s.participantId===l&&l!==P){return}l=s.participantId;I();const n=i>l||l===P;if(!n){return}const d={namespace:a,channel:r,type:"ACK1",methodPaths:m};o?.(`Sending handshake ACK1`,d);try{t.sendMessage(d)}catch(t){w(new e("TRANSMISSION_FAILED",t.message));return}};const A=s=>{o?.(`Received handshake ACK1`,s);const n={namespace:a,channel:r,type:"ACK2"};o?.(`Sending handshake ACK2`,n);try{t.sendMessage(n)}catch(t){w(new e("TRANSMISSION_FAILED",t.message));return}R()};const k=e=>{o?.(`Received handshake ACK2`,e);R()};const b=e=>{if(d(e)){O(e)}if(c(e)){A(e)}if(h(e)){k(e)}};t.addMessageHandler(b);g.push((()=>t.removeMessageHandler(b)));I();return f};const j=e=>{let t=false;let s;return(...n)=>{if(!t){t=true;s=e(...n)}return s}};const Y=new WeakSet;const $=({messenger:t,methods:s={},timeout:n,channel:r,log:o})=>{if(!t){throw new e("INVALID_ARGUMENT","messenger must be defined")}if(Y.has(t)){throw new e("INVALID_ARGUMENT","A messenger can only be used for a single connection")}Y.add(t);const i=[t.destroy];const d=j((e=>{if(e){const e={namespace:a,channel:r,type:"DESTROY"};try{t.sendMessage(e)}catch(e){}}for(const e of i){e()}o?.("Connection destroyed")}));const c=e=>l(e)&&e.channel===r;const h=(async()=>{try{t.initialize({log:o,validateReceivedMessage:c});t.addMessageHandler((e=>{if(m(e)){d(false)}}));const{remoteProxy:e,destroy:a}=await H({messenger:t,methods:s,timeout:n,channel:r,log:o});i.push(a);return e}catch(e){d(true);throw e}})();return{promise:h,destroy:()=>{d(true)}}};class V{#t;#s;#n;#r;#a;#o=new Set;#i;#l=false;constructor({remoteWindow:t,allowedOrigins:s}){if(!t){throw new e("INVALID_ARGUMENT","remoteWindow must be defined")}this.#t=t;this.#s=s?.length?s:[window.origin]}initialize=({log:e,validateReceivedMessage:t})=>{this.#n=e;this.#r=t;window.addEventListener("message",this.#d)};sendMessage=(e,t)=>{if(d(e)){const s=this.#c(e);this.#t.postMessage(e,{targetOrigin:s,transfer:t});return}if(c(e)||this.#l){const s=this.#l?U(e):e;const n=this.#c(e);this.#t.postMessage(s,{targetOrigin:n,transfer:t});return}if(h(e)){const{port1:s,port2:n}=new MessageChannel;this.#i=s;s.addEventListener("message",this.#h);s.start();const r=[n,...t||[]];const a=this.#c(e);this.#t.postMessage(e,{targetOrigin:a,transfer:r});return}if(this.#i){this.#i.postMessage(e,{transfer:t});return}throw new A("Port is undefined")};addMessageHandler=e=>{this.#o.add(e)};removeMessageHandler=e=>{this.#o.delete(e)};destroy=()=>{window.removeEventListener("message",this.#d);this.#g();this.#o.clear()};#u=e=>this.#s.some((t=>t instanceof RegExp?t.test(e):t===e||t==="*"));#c=e=>{if(d(e)){return"*"}if(!this.#a){throw new A("Concrete remote origin not set")}return this.#a==="null"&&this.#s.includes("*")?"*":this.#a};#g=()=>{this.#i?.removeEventListener("message",this.#h);this.#i?.close();this.#i=undefined};#d=({source:e,origin:t,ports:s,data:n})=>{if(e!==this.#t){return}if(T(n)){this.#n?.("Please upgrade the child window to the latest version of Penpal.");this.#l=true;n=F(n)}if(!this.#r?.(n)){return}if(!this.#u(t)){this.#n?.(`Received a message from origin \`${t}\` which did not match `+`allowed origins \`[${this.#s.join(", ")}]\``);return}if(d(n)){this.#g();this.#a=t}if(h(n)&&!this.#l){this.#i=s[0];if(!this.#i){throw new A("No port received on ACK2")}this.#i.addEventListener("message",this.#h);this.#i.start()}for(const e of this.#o){e(n)}};#h=({data:e})=>{if(!this.#r?.(e)){return}for(const t of this.#o){t(e)}}}class W{#m;#r;#o=new Set;#i;constructor({worker:t}){if(!t){throw new e("INVALID_ARGUMENT","worker must be defined")}this.#m=t}initialize=({validateReceivedMessage:e})=>{this.#r=e;this.#m.addEventListener("message",this.#p)};sendMessage=(e,t)=>{if(d(e)||c(e)){this.#m.postMessage(e,{transfer:t});return}if(h(e)){const{port1:s,port2:n}=new MessageChannel;this.#i=s;s.addEventListener("message",this.#p);s.start();this.#m.postMessage(e,{transfer:[n,...t||[]]});return}if(this.#i){this.#i.postMessage(e,{transfer:t});return}throw new A("Port is undefined")};addMessageHandler=e=>{this.#o.add(e)};removeMessageHandler=e=>{this.#o.delete(e)};destroy=()=>{this.#m.removeEventListener("message",this.#p);this.#g();this.#o.clear()};#g=()=>{this.#i?.removeEventListener("message",this.#p);this.#i?.close();this.#i=undefined};#p=({ports:e,data:t})=>{if(!this.#r?.(t)){return}if(d(t)){this.#g()}if(h(t)){this.#i=e[0];if(!this.#i){throw new A("No port received on ACK2")}this.#i.addEventListener("message",this.#p);this.#i.start()}for(const e of this.#o){e(t)}}}class K{#i;#r;#o=new Set;constructor({port:t}){if(!t){throw new e("INVALID_ARGUMENT","port must be defined")}this.#i=t}initialize=({validateReceivedMessage:e})=>{this.#r=e;this.#i.addEventListener("message",this.#p);this.#i.start()};sendMessage=(e,t)=>{this.#i?.postMessage(e,{transfer:t})};addMessageHandler=e=>{this.#o.add(e)};removeMessageHandler=e=>{this.#o.delete(e)};destroy=()=>{this.#i.removeEventListener("message",this.#p);this.#i.close();this.#o.clear()};#p=({data:e})=>{if(!this.#r?.(e)){return}for(const t of this.#o){t(e)}}}const x={ConnectionDestroyed:"CONNECTION_DESTROYED",ConnectionTimeout:"CONNECTION_TIMEOUT",InvalidArgument:"INVALID_ARGUMENT",MethodCallTimeout:"METHOD_CALL_TIMEOUT",MethodNotFound:"METHOD_NOT_FOUND",TransmissionFailed:"TRANSMISSION_FAILED"};const z=e=>(...t)=>{console.log(`✍️ %c${e}%c`,"font-weight: bold;","",...t)};var G={connect:$,WindowMessenger:V,WorkerMessenger:W,PortMessenger:K,CallOptions:C,Reply:r,PenpalError:e,debug:z,ErrorCode:x};return G}();
@@ -1 +1 @@
1
- {"version":3,"names":["Penpal","PenpalError","Error","code","constructor","message","super","this","name","serializeError","error","stack","penpalCode","undefined","deserializeError","deserializedError","brand$1","Symbol","Reply","value","transferables","brand","options","namespace","isObject","isFunction","isMessage","data","isSynMessage","type","isAck1Message","isAck2Message","isCallMessage","isReplyMessage","isDestroyMessage","extractMethodPathsFromMethods","methods","currentPath","methodPaths","key","Object","keys","push","getMethodAtMethodPath","methodPath","result","reduce","acc","pathSegment","formatMethodPath","join","createErrorReplyMessage","channel","callId","isError","isSerializedErrorInstance","connectCallHandler","messenger","log","isDestroyed","handleMessage","async","args","id","replyMessage","method","sendMessage","addMessageHandler","removeMessageHandler","generateId","crypto","randomUUID","bind","Array","fill","map","Math","floor","random","Number","MAX_SAFE_INTEGER","toString","CallOptions","timeout","methodsToTreatAsNative","Set","createRemoteProxy","callback","path","Proxy","length","create","get","target","prop","has","Reflect","apply","_thisArg","getDestroyedConnectionMethodCallError","connectRemoteProxy","replyHandlers","Map","replyHandler","delete","reject","resolve","remoteProxy","lastArg","lastArgIsOptions","argsWithoutOptions","slice","Promise","timeoutId","window","setTimeout","set","callMessage","destroy","values","clearTimeout","clear","getPromiseWithResolvers","promise","res","rej","PenpalBugError","DEPRECATED_PENPAL_PARTICIPANT_ID","DeprecatedMessageType","DeprecatedResolution","isDeprecatedMessage","upgradeMethodPath","split","downgradeMethodPath","getUnexpectedMessageError","JSON","stringify","upgradeMessage","penpal","Syn","participantId","Ack","Call","methodName","resolution","Fulfilled","returnValue","returnValueIsError","downgradeMessage","SynAck","methodNames","Rejected","shakeHands","remoteParticipantId","destroyHandlers","isComplete","destroyHandler","connectCallHandlerAndMethodProxies","destroyMethodProxies","sendSynMessage","synMessage","handleSynMessage","isHandshakeLeader","ack1Message","handleAck1Message","ack2Message","handleAck2Message","once","fn","isCalled","usedMessengers","WeakSet","connect","add","connectionDestroyedHandlers","destroyConnection","notifyOtherParticipant","destroyMessage","_","connectionDestroyedHandler","validateReceivedMessage","initialize","WindowMessenger","remoteWindow","allowedOrigins","concreteRemoteOrigin","messageCallbacks","port","isChildUsingDeprecatedProtocol","origin","addEventListener","handleMessageFromRemoteWindow","originForSending","getOriginForSendingMessage","postMessage","targetOrigin","transfer","payload","port1","port2","MessageChannel","handleMessageFromPort","start","transferablesToSend","removeEventListener","destroyPort","isAllowedOrigin","some","allowedOrigin","RegExp","test","includes","close","source","ports","WorkerMessenger","worker","PortMessenger","ErrorCodeObj","ConnectionDestroyed","ConnectionTimeout","InvalidArgument","MethodCallTimeout","MethodNotFound","TransmissionFailed","debug","prefix","console","indexForBundle","ErrorCode"],"sources":["dist/penpal.js"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Penpal","PenpalError","Error","code","constructor","message","super","this","name","serializeError","error","stack","penpalCode","undefined","deserializeError","deserializedError","brand$1","Symbol","Reply","value","transferables","brand","options","namespace","isObject","isFunction","isMessage","data","isSynMessage","type","isAck1Message","isAck2Message","isCallMessage","isReplyMessage","isDestroyMessage","extractMethodPathsFromMethods","methods","currentPath","methodPaths","key","Object","keys","push","getMethodAtMethodPath","methodPath","result","reduce","acc","pathSegment","formatMethodPath","join","createErrorReplyMessage","channel","callId","isError","isSerializedErrorInstance","connectCallHandler","messenger","log","isDestroyed","handleMessage","async","args","id","replyMessage","method","sendMessage","addMessageHandler","removeMessageHandler","generateId","crypto","randomUUID","bind","Array","fill","map","Math","floor","random","Number","MAX_SAFE_INTEGER","toString","CallOptions","timeout","methodsToTreatAsNative","Set","createRemoteProxy","callback","path","Proxy","length","create","get","target","prop","has","Reflect","apply","_thisArg","getDestroyedConnectionMethodCallError","connectRemoteProxy","replyHandlers","Map","replyHandler","delete","reject","resolve","remoteProxy","lastArg","lastArgIsOptions","argsWithoutOptions","slice","Promise","timeoutId","window","setTimeout","set","callMessage","destroy","values","clearTimeout","clear","getPromiseWithResolvers","promise","res","rej","PenpalBugError","DEPRECATED_PENPAL_PARTICIPANT_ID","DeprecatedMessageType","DeprecatedResolution","isDeprecatedMessage","upgradeMethodPath","split","downgradeMethodPath","getUnexpectedMessageError","JSON","stringify","upgradeMessage","penpal","Syn","participantId","Ack","Call","methodName","resolution","Fulfilled","returnValue","returnValueIsError","downgradeMessage","SynAck","methodNames","Rejected","shakeHands","remoteParticipantId","destroyHandlers","isComplete","destroyHandler","connectCallHandlerAndMethodProxies","destroyMethodProxies","sendSynMessage","synMessage","handleSynMessage","isHandshakeLeader","ack1Message","handleAck1Message","ack2Message","handleAck2Message","once","fn","isCalled","usedMessengers","WeakSet","connect","add","connectionDestroyedHandlers","destroyConnection","notifyOtherParticipant","destroyMessage","_","connectionDestroyedHandler","validateReceivedMessage","initialize","WindowMessenger","remoteWindow","allowedOrigins","concreteRemoteOrigin","messageCallbacks","port","isChildUsingDeprecatedProtocol","origin","addEventListener","handleMessageFromRemoteWindow","originForSending","getOriginForSendingMessage","postMessage","targetOrigin","transfer","payload","port1","port2","MessageChannel","handleMessageFromPort","start","transferablesToSend","removeEventListener","destroyPort","isAllowedOrigin","some","allowedOrigin","RegExp","test","includes","close","source","ports","WorkerMessenger","worker","PortMessenger","ErrorCodeObj","ConnectionDestroyed","ConnectionTimeout","InvalidArgument","MethodCallTimeout","MethodNotFound","TransmissionFailed","debug","prefix","console","indexForBundle","ErrorCode"],"sources":["dist/penpal.js"],"mappings":"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","ignoreList":[]}
@@ -91,11 +91,14 @@ class WindowMessenger {
91
91
  : allowedOrigin === origin || allowedOrigin === '*');
92
92
  };
93
93
  #getOriginForSendingMessage = (message) => {
94
+ // It's safe to send the SYN message to any origin because it doesn't contain
95
+ // anything sensitive. When Penpal receives a SYN message, the origin on
96
+ // the message (which we call the concrete origin) is validated against the
97
+ // configured allowed origins. All subsequent messages will be sent to the
98
+ // concrete origin.
99
+ // If you decide to change this, consider https://github.com/Aaronius/penpal/issues/103
94
100
  if (isSynMessage(message)) {
95
- return this.#allowedOrigins.length > 1 ||
96
- this.#allowedOrigins[0] instanceof RegExp
97
- ? '*'
98
- : this.#allowedOrigins[0];
101
+ return '*';
99
102
  }
100
103
  if (!this.#concreteRemoteOrigin) {
101
104
  throw new PenpalBugError('Concrete remote origin not set');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "penpal",
3
- "version": "7.0.2",
3
+ "version": "7.0.3",
4
4
  "description": "Penpal simplifies communication with iframes, workers, and windows by using promise-based methods on top of postMessage.",
5
5
  "author": "Aaron Hardy <aaron@aaronhardy.com>",
6
6
  "license": "MIT",