@shopify/remix-oxygen
Advanced tools
Comparing version 0.0.0-next-6f68b0c-20230608163816 to 0.0.0-next-71a0737-20230907203205
@@ -51,2 +51,38 @@ import { createCookieFactory, createCookieSessionStorageFactory, createSessionStorageFactory, createMemorySessionStorageFactory, createRequestHandler as createRequestHandler$1 } from '@remix-run/server-runtime'; | ||
var createMemorySessionStorage = createMemorySessionStorageFactory(createSessionStorage); | ||
// src/event-logger.ts | ||
function createEventLogger(appLoadContext) { | ||
const context = appLoadContext || {}; | ||
const eventLoggerService = context?.env?.H2O_LOG_EVENT; | ||
if (typeof eventLoggerService?.fetch !== "function") | ||
return; | ||
return ({ | ||
url, | ||
eventType, | ||
requestId, | ||
purpose, | ||
startTime, | ||
endTime, | ||
cacheStatus, | ||
waitUntil = context?.waitUntil | ||
}) => { | ||
const promise = eventLoggerService.fetch( | ||
new Request(url, { | ||
headers: { | ||
purpose: purpose || "", | ||
"request-id": requestId || "", | ||
"hydrogen-event-type": eventType, | ||
"hydrogen-start-time": String(startTime), | ||
"hydrogen-end-time": String(endTime || Date.now()), | ||
"hydrogen-cache-status": cacheStatus || "" | ||
} | ||
}) | ||
).catch((error) => { | ||
console.debug("Failed to log H2O event\n", error.stack); | ||
}); | ||
promise && waitUntil?.(promise); | ||
}; | ||
} | ||
// src/server.ts | ||
function createRequestHandler({ | ||
@@ -60,6 +96,17 @@ build, | ||
return async (request) => { | ||
const response = await handleRequest( | ||
request, | ||
await getLoadContext?.(request) | ||
); | ||
const context = getLoadContext ? await getLoadContext(request) : void 0; | ||
if (context) { | ||
globalThis.__H2O_LOG_EVENT = createEventLogger(context); | ||
} | ||
const startTime = Date.now(); | ||
const response = await handleRequest(request, context); | ||
{ | ||
globalThis.__H2O_LOG_EVENT?.({ | ||
eventType: "request", | ||
url: request.url, | ||
requestId: request.headers.get("request-id"), | ||
purpose: request.headers.get("purpose"), | ||
startTime | ||
}); | ||
} | ||
if (poweredByHeader) { | ||
@@ -66,0 +113,0 @@ response.headers.append("powered-by", "Shopify, Hydrogen"); |
@@ -10,2 +10,16 @@ import * as _remix_run_server_runtime from '@remix-run/server-runtime'; | ||
type H2OEvent = { | ||
url: string; | ||
eventType: 'request' | 'subrequest'; | ||
requestId?: string | null; | ||
purpose?: string | null; | ||
startTime: number; | ||
endTime?: number; | ||
cacheStatus?: 'MISS' | 'HIT' | 'STALE' | 'PUT'; | ||
waitUntil?: ExecutionContext['waitUntil']; | ||
}; | ||
declare global { | ||
var __H2O_LOG_EVENT: undefined | ((event: H2OEvent) => void); | ||
} | ||
declare function createRequestHandler<Context = unknown>({ build, mode, poweredByHeader, getLoadContext, }: { | ||
@@ -12,0 +26,0 @@ build: ServerBuild; |
import { createCookieFactory, createCookieSessionStorageFactory, createSessionStorageFactory, createMemorySessionStorageFactory, createRequestHandler } from '@remix-run/server-runtime'; | ||
export { MaxPartSizeExceededError, createSession, defer, isCookie, isSession, json, redirect, unstable_composeUploadHandlers, unstable_createMemoryUploadHandler, unstable_parseMultipartFormData } from '@remix-run/server-runtime'; | ||
var i=new TextEncoder,u=async(e,t)=>{let r=await d(t,["sign"]),o=i.encode(e),a=await crypto.subtle.sign("HMAC",r,o),n=btoa(String.fromCharCode(...new Uint8Array(a))).replace(/=+$/,"");return e+"."+n},p=async(e,t)=>{let r=e.lastIndexOf("."),o=e.slice(0,r),a=e.slice(r+1),n=await d(t,["verify"]),s=i.encode(o),y=g(atob(a));return await crypto.subtle.verify("HMAC",n,y,s)?o:!1};async function d(e,t){return await crypto.subtle.importKey("raw",i.encode(e),{name:"HMAC",hash:"SHA-256"},!1,t)}function g(e){let t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}var c=createCookieFactory({sign:u,unsign:p}),f=createCookieSessionStorageFactory(c),l=createSessionStorageFactory(c),H=createMemorySessionStorageFactory(l);function F({build:e,mode:t,poweredByHeader:r=!0,getLoadContext:o}){let a=createRequestHandler(e,t);return async n=>{let s=await a(n,await o?.(n));return r&&s.headers.append("powered-by","Shopify, Hydrogen"),s}}function M(e){return e.headers.get("oxygen-buyer-ip")??void 0}function A(e){let t=e.headers;return {requestGroupId:t.get("request-id"),buyerIp:t.get("oxygen-buyer-ip"),cookie:t.get("cookie")}} | ||
var c=new TextEncoder,d=async(e,t)=>{let r=await g(t,["sign"]),o=c.encode(e),s=await crypto.subtle.sign("HMAC",r,o),n=btoa(String.fromCharCode(...new Uint8Array(s))).replace(/=+$/,"");return e+"."+n},l=async(e,t)=>{let r=e.lastIndexOf("."),o=e.slice(0,r),s=e.slice(r+1),n=await g(t,["verify"]),a=c.encode(o),p=m(atob(s));return await crypto.subtle.verify("HMAC",n,p,a)?o:!1};async function g(e,t){return await crypto.subtle.importKey("raw",c.encode(e),{name:"HMAC",hash:"SHA-256"},!1,t)}function m(e){let t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}var u=createCookieFactory({sign:d,unsign:l}),C=createCookieSessionStorageFactory(u),y=createSessionStorageFactory(u),v=createMemorySessionStorageFactory(y);function k({build:e,mode:t,poweredByHeader:r=!0,getLoadContext:o}){let s=createRequestHandler(e,t);return async n=>{let a=o?await o(n):void 0,i=await s(n,a);return r&&i.headers.append("powered-by","Shopify, Hydrogen"),i}}function F(e){return e.headers.get("oxygen-buyer-ip")??void 0}function M(e){let t=e.headers;return {requestGroupId:t.get("request-id"),buyerIp:t.get("oxygen-buyer-ip"),cookie:t.get("cookie")}} | ||
export { c as createCookie, f as createCookieSessionStorage, H as createMemorySessionStorage, F as createRequestHandler, l as createSessionStorage, M as getBuyerIp, A as getStorefrontHeaders }; | ||
export { u as createCookie, C as createCookieSessionStorage, v as createMemorySessionStorage, k as createRequestHandler, y as createSessionStorage, F as getBuyerIp, M as getStorefrontHeaders }; | ||
//# sourceMappingURL=out.js.map | ||
//# sourceMappingURL=index.js.map |
@@ -8,3 +8,3 @@ { | ||
"type": "module", | ||
"version": "0.0.0-next-6f68b0c-20230608163816", | ||
"version": "0.0.0-next-71a0737-20230907203205", | ||
"license": "MIT", | ||
@@ -16,4 +16,4 @@ "main": "dist/index.cjs", | ||
"scripts": { | ||
"build": "tsup --clean --config ../../tsup.config.ts", | ||
"dev": "tsup --watch --config ../../tsup.config.ts", | ||
"build": "tsup --clean", | ||
"dev": "tsup --watch", | ||
"prepack": "npm run build", | ||
@@ -45,10 +45,10 @@ "typecheck": "tsc --noEmit" | ||
"dependencies": { | ||
"@remix-run/server-runtime": "1.15.0" | ||
"@remix-run/server-runtime": "1.19.1" | ||
}, | ||
"devDependencies": { | ||
"@shopify/oxygen-workers-types": "^3.17.2" | ||
"@shopify/oxygen-workers-types": "^3.17.3" | ||
}, | ||
"peerDependencies": { | ||
"@shopify/oxygen-workers-types": "^3.17.2" | ||
"@shopify/oxygen-workers-types": "^3.17.3" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
60657
14
394
+ Added@remix-run/router@1.7.2(transitive)
+ Added@remix-run/server-runtime@1.19.1(transitive)
- Removed@remix-run/router@1.5.0(transitive)
- Removed@remix-run/server-runtime@1.15.0(transitive)
- Removed@types/prop-types@15.7.14(transitive)
- Removed@types/react@18.3.18(transitive)
- Removedcsstype@3.1.3(transitive)