@priceos/next 0.0.4 → 0.0.7
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/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -34,15 +34,15 @@ var jsonResponse = (status, body) => new Response(JSON.stringify(body), {
|
|
|
34
34
|
function priceosHandler(options = {}) {
|
|
35
35
|
const envApiKey = globalThis.process?.env?.PRICEOS_API_KEY;
|
|
36
36
|
const apiKey = options.apiKey ?? envApiKey;
|
|
37
|
-
const
|
|
37
|
+
const getCustomerId = options.getCustomerId;
|
|
38
38
|
const baseUrl = (options.baseUrl ?? "https://api.priceos.com").replace(/\/$/, "");
|
|
39
39
|
const basePath = (options.basePath ?? DEFAULT_BASE_PATH).replace(/\/+$/, "");
|
|
40
40
|
return async (request) => {
|
|
41
41
|
if (!apiKey) {
|
|
42
42
|
return new Response("Missing PRICEOS_API_KEY.", { status: 500 });
|
|
43
43
|
}
|
|
44
|
-
if (!
|
|
45
|
-
return jsonResponse(500, { error: "Missing
|
|
44
|
+
if (!getCustomerId) {
|
|
45
|
+
return jsonResponse(500, { error: "Missing getCustomerId function" });
|
|
46
46
|
}
|
|
47
47
|
let path = "";
|
|
48
48
|
const url = new URL(request.url);
|
|
@@ -59,13 +59,13 @@ function priceosHandler(options = {}) {
|
|
|
59
59
|
return new Response("Method not allowed.", { status: 405 });
|
|
60
60
|
}
|
|
61
61
|
if (url.searchParams.has("customerId")) {
|
|
62
|
-
return jsonResponse(400, { error: "customerId must be set via
|
|
62
|
+
return jsonResponse(400, { error: "customerId must be set via getCustomerId" });
|
|
63
63
|
}
|
|
64
64
|
let customerId;
|
|
65
65
|
try {
|
|
66
|
-
customerId = await
|
|
66
|
+
customerId = await getCustomerId(request);
|
|
67
67
|
} catch (error) {
|
|
68
|
-
return jsonResponse(500, { error: "Failed to
|
|
68
|
+
return jsonResponse(500, { error: "Failed to resolve customerId" });
|
|
69
69
|
}
|
|
70
70
|
if (typeof customerId !== "string" || !customerId) {
|
|
71
71
|
return jsonResponse(401, { error: "Customer not identified" });
|
|
@@ -119,10 +119,10 @@ var sendResponse = async (res, response) => {
|
|
|
119
119
|
};
|
|
120
120
|
function priceosPagesHandler(options = {}) {
|
|
121
121
|
return async (req, res) => {
|
|
122
|
-
const
|
|
122
|
+
const getCustomerId = options.getCustomerId;
|
|
123
123
|
const handler = priceosHandler({
|
|
124
124
|
...options,
|
|
125
|
-
|
|
125
|
+
getCustomerId: getCustomerId ? () => getCustomerId(req) : void 0
|
|
126
126
|
});
|
|
127
127
|
const request = buildRequest(req);
|
|
128
128
|
const response = await handler(request);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { PriceOS, PriceOSError } from \"priceos\";\n\nexport type
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { PriceOS, PriceOSError } from \"priceos\";\n\nexport type PriceOSGetCustomerId = (\n request: Request\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSPagesRequest = {\n method?: string;\n headers?: Record<string, string | string[] | undefined>;\n url?: string;\n socket?: { encrypted?: boolean };\n};\n\nexport type PriceOSPagesResponse = {\n status?: (code: number) => PriceOSPagesResponse;\n setHeader?: (name: string, value: string | string[]) => void;\n end?: (body?: string) => void;\n statusCode?: number;\n};\n\nexport type PriceOSPagesGetCustomerId = (\n request: PriceOSPagesRequest\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSNextHandlerOptions = {\n apiKey?: string;\n baseUrl?: string;\n basePath?: string;\n getCustomerId?: PriceOSGetCustomerId;\n};\n\nexport type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, \"getCustomerId\"> & {\n getCustomerId?: PriceOSPagesGetCustomerId;\n};\n\nconst DEFAULT_BASE_PATH = \"/api/priceos\";\n\nconst normalizePath = (value: string) => value.replace(/^\\/+/, \"\");\n\nconst jsonResponse = (status: number, body: unknown) =>\n new Response(JSON.stringify(body), {\n status,\n headers: { \"content-type\": \"application/json\" },\n });\n\nexport function priceosHandler(options: PriceOSNextHandlerOptions = {}) {\n const envApiKey = (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.PRICEOS_API_KEY;\n const apiKey = options.apiKey ?? envApiKey;\n const getCustomerId = options.getCustomerId;\n const baseUrl = (options.baseUrl ?? \"https://api.priceos.com\").replace(/\\/$/, \"\");\n const basePath = (options.basePath ?? DEFAULT_BASE_PATH).replace(/\\/+$/, \"\");\n\n return async (request: Request) => {\n if (!apiKey) {\n return new Response(\"Missing PRICEOS_API_KEY.\", { status: 500 });\n }\n\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n\n let path = \"\";\n const url = new URL(request.url);\n const pathname = url.pathname;\n if (pathname.startsWith(basePath)) {\n path = normalizePath(pathname.slice(basePath.length));\n }\n\n if (path !== \"v1/customer\") {\n return new Response(\"Not found.\", { status: 404 });\n }\n\n const client = new PriceOS(apiKey, { baseUrl });\n const method = request.method.toUpperCase();\n if (method !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n let customerId: string | null | undefined;\n try {\n customerId = await getCustomerId(request);\n } catch (error) {\n return jsonResponse(500, { error: \"Failed to resolve customerId\" });\n }\n\n if (typeof customerId !== \"string\" || !customerId) {\n return jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.getCustomer(customerId);\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n };\n}\n\nconst getHeaderValue = (\n headers: Record<string, string | string[] | undefined> | undefined,\n key: string\n) => {\n const value = headers?.[key];\n if (Array.isArray(value)) return value.join(\",\");\n return value;\n};\n\nconst toHeaders = (headers: Record<string, string | string[] | undefined> | undefined) => {\n const result = new Headers();\n if (!headers) return result;\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") result.set(key, value);\n if (Array.isArray(value)) result.set(key, value.join(\",\"));\n }\n return result;\n};\n\nconst buildRequest = (req: PriceOSPagesRequest) => {\n const headers = req.headers ?? {};\n const forwardedProto = getHeaderValue(headers, \"x-forwarded-proto\");\n const protocol =\n forwardedProto?.split(\",\")[0] ?? (req.socket?.encrypted ? \"https\" : \"http\");\n const host =\n getHeaderValue(headers, \"x-forwarded-host\") ??\n getHeaderValue(headers, \"host\") ??\n \"localhost\";\n const url = new URL(req.url ?? \"/\", `${protocol}://${host}`);\n return new Request(url, { method: req.method ?? \"GET\", headers: toHeaders(headers) });\n};\n\nconst sendResponse = async (res: PriceOSPagesResponse, response: Response) => {\n if (typeof res.status === \"function\") {\n res.status(response.status);\n } else {\n res.statusCode = response.status;\n }\n\n if (typeof res.setHeader === \"function\") {\n response.headers.forEach((value, key) => {\n res.setHeader?.(key, value);\n });\n }\n\n const body = await response.text();\n res.end?.(body || undefined);\n};\n\nexport function priceosPagesHandler(options: PriceOSPagesHandlerOptions = {}) {\n return async (req: PriceOSPagesRequest, res: PriceOSPagesResponse) => {\n const getCustomerId = options.getCustomerId;\n const handler = priceosHandler({\n ...options,\n getCustomerId: getCustomerId ? () => getCustomerId(req) : undefined,\n });\n const request = buildRequest(req);\n const response = await handler(request);\n await sendResponse(res, response);\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type
|
|
1
|
+
type PriceOSGetCustomerId = (request: Request) => string | null | undefined | Promise<string | null | undefined>;
|
|
2
2
|
type PriceOSPagesRequest = {
|
|
3
3
|
method?: string;
|
|
4
4
|
headers?: Record<string, string | string[] | undefined>;
|
|
@@ -13,17 +13,17 @@ type PriceOSPagesResponse = {
|
|
|
13
13
|
end?: (body?: string) => void;
|
|
14
14
|
statusCode?: number;
|
|
15
15
|
};
|
|
16
|
-
type
|
|
16
|
+
type PriceOSPagesGetCustomerId = (request: PriceOSPagesRequest) => string | null | undefined | Promise<string | null | undefined>;
|
|
17
17
|
type PriceOSNextHandlerOptions = {
|
|
18
18
|
apiKey?: string;
|
|
19
19
|
baseUrl?: string;
|
|
20
20
|
basePath?: string;
|
|
21
|
-
|
|
21
|
+
getCustomerId?: PriceOSGetCustomerId;
|
|
22
22
|
};
|
|
23
|
-
type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, "
|
|
24
|
-
|
|
23
|
+
type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, "getCustomerId"> & {
|
|
24
|
+
getCustomerId?: PriceOSPagesGetCustomerId;
|
|
25
25
|
};
|
|
26
26
|
declare function priceosHandler(options?: PriceOSNextHandlerOptions): (request: Request) => Promise<Response>;
|
|
27
27
|
declare function priceosPagesHandler(options?: PriceOSPagesHandlerOptions): (req: PriceOSPagesRequest, res: PriceOSPagesResponse) => Promise<void>;
|
|
28
28
|
|
|
29
|
-
export { type
|
|
29
|
+
export { type PriceOSGetCustomerId, type PriceOSNextHandlerOptions, type PriceOSPagesGetCustomerId, type PriceOSPagesHandlerOptions, type PriceOSPagesRequest, type PriceOSPagesResponse, priceosHandler, priceosPagesHandler };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type
|
|
1
|
+
type PriceOSGetCustomerId = (request: Request) => string | null | undefined | Promise<string | null | undefined>;
|
|
2
2
|
type PriceOSPagesRequest = {
|
|
3
3
|
method?: string;
|
|
4
4
|
headers?: Record<string, string | string[] | undefined>;
|
|
@@ -13,17 +13,17 @@ type PriceOSPagesResponse = {
|
|
|
13
13
|
end?: (body?: string) => void;
|
|
14
14
|
statusCode?: number;
|
|
15
15
|
};
|
|
16
|
-
type
|
|
16
|
+
type PriceOSPagesGetCustomerId = (request: PriceOSPagesRequest) => string | null | undefined | Promise<string | null | undefined>;
|
|
17
17
|
type PriceOSNextHandlerOptions = {
|
|
18
18
|
apiKey?: string;
|
|
19
19
|
baseUrl?: string;
|
|
20
20
|
basePath?: string;
|
|
21
|
-
|
|
21
|
+
getCustomerId?: PriceOSGetCustomerId;
|
|
22
22
|
};
|
|
23
|
-
type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, "
|
|
24
|
-
|
|
23
|
+
type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, "getCustomerId"> & {
|
|
24
|
+
getCustomerId?: PriceOSPagesGetCustomerId;
|
|
25
25
|
};
|
|
26
26
|
declare function priceosHandler(options?: PriceOSNextHandlerOptions): (request: Request) => Promise<Response>;
|
|
27
27
|
declare function priceosPagesHandler(options?: PriceOSPagesHandlerOptions): (req: PriceOSPagesRequest, res: PriceOSPagesResponse) => Promise<void>;
|
|
28
28
|
|
|
29
|
-
export { type
|
|
29
|
+
export { type PriceOSGetCustomerId, type PriceOSNextHandlerOptions, type PriceOSPagesGetCustomerId, type PriceOSPagesHandlerOptions, type PriceOSPagesRequest, type PriceOSPagesResponse, priceosHandler, priceosPagesHandler };
|
package/dist/index.js
CHANGED
|
@@ -9,15 +9,15 @@ var jsonResponse = (status, body) => new Response(JSON.stringify(body), {
|
|
|
9
9
|
function priceosHandler(options = {}) {
|
|
10
10
|
const envApiKey = globalThis.process?.env?.PRICEOS_API_KEY;
|
|
11
11
|
const apiKey = options.apiKey ?? envApiKey;
|
|
12
|
-
const
|
|
12
|
+
const getCustomerId = options.getCustomerId;
|
|
13
13
|
const baseUrl = (options.baseUrl ?? "https://api.priceos.com").replace(/\/$/, "");
|
|
14
14
|
const basePath = (options.basePath ?? DEFAULT_BASE_PATH).replace(/\/+$/, "");
|
|
15
15
|
return async (request) => {
|
|
16
16
|
if (!apiKey) {
|
|
17
17
|
return new Response("Missing PRICEOS_API_KEY.", { status: 500 });
|
|
18
18
|
}
|
|
19
|
-
if (!
|
|
20
|
-
return jsonResponse(500, { error: "Missing
|
|
19
|
+
if (!getCustomerId) {
|
|
20
|
+
return jsonResponse(500, { error: "Missing getCustomerId function" });
|
|
21
21
|
}
|
|
22
22
|
let path = "";
|
|
23
23
|
const url = new URL(request.url);
|
|
@@ -34,13 +34,13 @@ function priceosHandler(options = {}) {
|
|
|
34
34
|
return new Response("Method not allowed.", { status: 405 });
|
|
35
35
|
}
|
|
36
36
|
if (url.searchParams.has("customerId")) {
|
|
37
|
-
return jsonResponse(400, { error: "customerId must be set via
|
|
37
|
+
return jsonResponse(400, { error: "customerId must be set via getCustomerId" });
|
|
38
38
|
}
|
|
39
39
|
let customerId;
|
|
40
40
|
try {
|
|
41
|
-
customerId = await
|
|
41
|
+
customerId = await getCustomerId(request);
|
|
42
42
|
} catch (error) {
|
|
43
|
-
return jsonResponse(500, { error: "Failed to
|
|
43
|
+
return jsonResponse(500, { error: "Failed to resolve customerId" });
|
|
44
44
|
}
|
|
45
45
|
if (typeof customerId !== "string" || !customerId) {
|
|
46
46
|
return jsonResponse(401, { error: "Customer not identified" });
|
|
@@ -94,10 +94,10 @@ var sendResponse = async (res, response) => {
|
|
|
94
94
|
};
|
|
95
95
|
function priceosPagesHandler(options = {}) {
|
|
96
96
|
return async (req, res) => {
|
|
97
|
-
const
|
|
97
|
+
const getCustomerId = options.getCustomerId;
|
|
98
98
|
const handler = priceosHandler({
|
|
99
99
|
...options,
|
|
100
|
-
|
|
100
|
+
getCustomerId: getCustomerId ? () => getCustomerId(req) : void 0
|
|
101
101
|
});
|
|
102
102
|
const request = buildRequest(req);
|
|
103
103
|
const response = await handler(request);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { PriceOS, PriceOSError } from \"priceos\";\n\nexport type
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { PriceOS, PriceOSError } from \"priceos\";\n\nexport type PriceOSGetCustomerId = (\n request: Request\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSPagesRequest = {\n method?: string;\n headers?: Record<string, string | string[] | undefined>;\n url?: string;\n socket?: { encrypted?: boolean };\n};\n\nexport type PriceOSPagesResponse = {\n status?: (code: number) => PriceOSPagesResponse;\n setHeader?: (name: string, value: string | string[]) => void;\n end?: (body?: string) => void;\n statusCode?: number;\n};\n\nexport type PriceOSPagesGetCustomerId = (\n request: PriceOSPagesRequest\n) => string | null | undefined | Promise<string | null | undefined>;\n\nexport type PriceOSNextHandlerOptions = {\n apiKey?: string;\n baseUrl?: string;\n basePath?: string;\n getCustomerId?: PriceOSGetCustomerId;\n};\n\nexport type PriceOSPagesHandlerOptions = Omit<PriceOSNextHandlerOptions, \"getCustomerId\"> & {\n getCustomerId?: PriceOSPagesGetCustomerId;\n};\n\nconst DEFAULT_BASE_PATH = \"/api/priceos\";\n\nconst normalizePath = (value: string) => value.replace(/^\\/+/, \"\");\n\nconst jsonResponse = (status: number, body: unknown) =>\n new Response(JSON.stringify(body), {\n status,\n headers: { \"content-type\": \"application/json\" },\n });\n\nexport function priceosHandler(options: PriceOSNextHandlerOptions = {}) {\n const envApiKey = (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.PRICEOS_API_KEY;\n const apiKey = options.apiKey ?? envApiKey;\n const getCustomerId = options.getCustomerId;\n const baseUrl = (options.baseUrl ?? \"https://api.priceos.com\").replace(/\\/$/, \"\");\n const basePath = (options.basePath ?? DEFAULT_BASE_PATH).replace(/\\/+$/, \"\");\n\n return async (request: Request) => {\n if (!apiKey) {\n return new Response(\"Missing PRICEOS_API_KEY.\", { status: 500 });\n }\n\n if (!getCustomerId) {\n return jsonResponse(500, { error: \"Missing getCustomerId function\" });\n }\n\n let path = \"\";\n const url = new URL(request.url);\n const pathname = url.pathname;\n if (pathname.startsWith(basePath)) {\n path = normalizePath(pathname.slice(basePath.length));\n }\n\n if (path !== \"v1/customer\") {\n return new Response(\"Not found.\", { status: 404 });\n }\n\n const client = new PriceOS(apiKey, { baseUrl });\n const method = request.method.toUpperCase();\n if (method !== \"GET\") {\n return new Response(\"Method not allowed.\", { status: 405 });\n }\n\n if (url.searchParams.has(\"customerId\")) {\n return jsonResponse(400, { error: \"customerId must be set via getCustomerId\" });\n }\n\n let customerId: string | null | undefined;\n try {\n customerId = await getCustomerId(request);\n } catch (error) {\n return jsonResponse(500, { error: \"Failed to resolve customerId\" });\n }\n\n if (typeof customerId !== \"string\" || !customerId) {\n return jsonResponse(401, { error: \"Customer not identified\" });\n }\n\n try {\n const data = await client.getCustomer(customerId);\n return jsonResponse(200, data);\n } catch (error) {\n if (error instanceof PriceOSError) {\n return jsonResponse(error.status ?? 500, { error: error.message });\n }\n return jsonResponse(500, { error: \"Request failed\" });\n }\n };\n}\n\nconst getHeaderValue = (\n headers: Record<string, string | string[] | undefined> | undefined,\n key: string\n) => {\n const value = headers?.[key];\n if (Array.isArray(value)) return value.join(\",\");\n return value;\n};\n\nconst toHeaders = (headers: Record<string, string | string[] | undefined> | undefined) => {\n const result = new Headers();\n if (!headers) return result;\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") result.set(key, value);\n if (Array.isArray(value)) result.set(key, value.join(\",\"));\n }\n return result;\n};\n\nconst buildRequest = (req: PriceOSPagesRequest) => {\n const headers = req.headers ?? {};\n const forwardedProto = getHeaderValue(headers, \"x-forwarded-proto\");\n const protocol =\n forwardedProto?.split(\",\")[0] ?? (req.socket?.encrypted ? \"https\" : \"http\");\n const host =\n getHeaderValue(headers, \"x-forwarded-host\") ??\n getHeaderValue(headers, \"host\") ??\n \"localhost\";\n const url = new URL(req.url ?? \"/\", `${protocol}://${host}`);\n return new Request(url, { method: req.method ?? \"GET\", headers: toHeaders(headers) });\n};\n\nconst sendResponse = async (res: PriceOSPagesResponse, response: Response) => {\n if (typeof res.status === \"function\") {\n res.status(response.status);\n } else {\n res.statusCode = response.status;\n }\n\n if (typeof res.setHeader === \"function\") {\n response.headers.forEach((value, key) => {\n res.setHeader?.(key, value);\n });\n }\n\n const body = await response.text();\n res.end?.(body || undefined);\n};\n\nexport function priceosPagesHandler(options: PriceOSPagesHandlerOptions = {}) {\n return async (req: PriceOSPagesRequest, res: PriceOSPagesResponse) => {\n const getCustomerId = options.getCustomerId;\n const handler = priceosHandler({\n ...options,\n getCustomerId: getCustomerId ? () => getCustomerId(req) : undefined,\n });\n const request = buildRequest(req);\n const response = await handler(request);\n await sendResponse(res, response);\n };\n}\n"],"mappings":"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","names":[]}
|