b23-lib 1.6.1 → 1.7.0

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.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{BatchGetItemCommand as q,DeleteItemCommand as z,DynamoDBClient as X,ExecuteStatementCommand as Q,GetItemCommand as Z,PutItemCommand as tt,QueryCommand as k,ScanCommand as et,TransactWriteItemsCommand as nt,UpdateItemCommand as rt,ReturnConsumedCapacity as h,ReturnValue as x,ReturnValuesOnConditionCheckFailure as P,ReturnItemCollectionMetrics as F}from"@aws-sdk/client-dynamodb";import{marshall as N,unmarshall as E}from"@aws-sdk/util-dynamodb";var O=class{client;returnItemCollectionMetrics;logCapacity;region;marshall=N;unmarshall=E;ReturnValue=x;ReturnItemCollectionMetrics=F;ReturnValuesOnConditionCheckFailure=P;constructor({region:t,returnItemCollectionMetrics:e=F.NONE,logCapacity:r=!1}){this.region=t,this.returnItemCollectionMetrics=e,this.logCapacity=r,this.client=new X({region:this.region})}log(t,e,r){this.logCapacity&&console.log(t,"Capacity:",e,"Size:",r)}async putItem(t,e,r,s,a,i=x.NONE,o=P.ALL_OLD){let u={TableName:t,Item:N(e,{removeUndefinedValues:!0,convertClassInstanceToMap:!0}),ConditionExpression:r,ExpressionAttributeNames:s,ExpressionAttributeValues:a,ReturnValues:i,ReturnConsumedCapacity:h.INDEXES,ReturnValuesOnConditionCheckFailure:o,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},m=new tt(u),l=await this.client.send(m);return this.log("Put",l.ConsumedCapacity,l.ItemCollectionMetrics),E(l.Attributes||{})}async transactWriteItems(t){let e={TransactItems:t.map(a=>(a.Put&&(a.Put.Item=N(a.Put.Item,{removeUndefinedValues:!0,convertClassInstanceToMap:!0})),a.Update&&(a.Update.Key=N(a.Update.Key)),a.Delete&&(a.Delete.Key=N(a.Delete.Key)),a)),ReturnConsumedCapacity:h.INDEXES,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},r=new nt(e),s=await this.client.send(r);this.log("Transaction",s.ConsumedCapacity,s.ItemCollectionMetrics)}async getItem(t,e,r=!1,s,a){let i={TableName:t,Key:N(e),ConsistentRead:r,ProjectionExpression:s,ExpressionAttributeNames:a,ReturnConsumedCapacity:h.TOTAL},o=new Z(i),u=await this.client.send(o);return this.log("Read",u.ConsumedCapacity),E(u.Item||{})}async batchGetItem(t,e,r=!1,s,a){let i={RequestItems:{[t]:{Keys:e.map(m=>N(m)),ConsistentRead:r,ProjectionExpression:s,ExpressionAttributeNames:a}},ReturnConsumedCapacity:h.TOTAL},o=new q(i),u=await this.client.send(o);return this.log("BatchRead",u.ConsumedCapacity),u.Responses?.[t]?.map(m=>E(m))||[]}async queryItems(t,e,r=!1,s,a,i,o){let u={TableName:t,KeyConditionExpression:e,ExpressionAttributeValues:i,ConsistentRead:r,ProjectionExpression:s,ExpressionAttributeNames:a,ExclusiveStartKey:o,ReturnConsumedCapacity:h.TOTAL},m=new k(u),l=await this.client.send(m);return this.log("Query",l.ConsumedCapacity),{items:l.Items?.map(d=>E(d))||[],lastEvaluatedKey:l.LastEvaluatedKey}}async scanItems(t,e,r=!1,s,a,i,o){let u={TableName:t,FilterExpression:e,ExpressionAttributeValues:i,ConsistentRead:r,ProjectionExpression:s,ExpressionAttributeNames:a,ExclusiveStartKey:o,ReturnConsumedCapacity:h.TOTAL},m=new et(u),l=await this.client.send(m);return this.log("Scan",l.ConsumedCapacity),{items:l.Items?.map(d=>E(d))||[],lastEvaluatedKey:l.LastEvaluatedKey}}async partiQL(t,e=[],r,s=!1){let a={Statement:t,Parameters:e,ConsistentRead:s,NextToken:r,ReturnConsumedCapacity:h.INDEXES},i=new Q(a),o=await this.client.send(i);return this.log("PartiQL",o.ConsumedCapacity),{Items:o.Items?.map(u=>E(u))||[],nextToken:o.NextToken,lastEvaluatedKey:o.LastEvaluatedKey}}async updateItem(t,e,r,s,a,i,o=x.UPDATED_NEW,u=P.ALL_OLD){let m={TableName:t,Key:N(e),ConditionExpression:r,UpdateExpression:s,ExpressionAttributeNames:a,ExpressionAttributeValues:i,ReturnValues:o,ReturnConsumedCapacity:h.INDEXES,ReturnValuesOnConditionCheckFailure:u,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},l=new rt(m),d=await this.client.send(l);return this.log("Update",d.ConsumedCapacity,d.ItemCollectionMetrics),E(d.Attributes||{})}async deleteItem(t,e,r,s,a,i=x.ALL_OLD,o=P.ALL_OLD){let u={TableName:t,Key:N(e),ConditionExpression:r,ExpressionAttributeNames:s,ExpressionAttributeValues:a,ReturnValues:i,ReturnConsumedCapacity:h.INDEXES,ReturnValuesOnConditionCheckFailure:o,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},m=new z(u),l=await this.client.send(m);return this.log("Delete",l.ConsumedCapacity,l.ItemCollectionMetrics),E(l.Attributes||{})}async getItemByIndex(t,e,r,s=!1,a,i,o,u){let m={TableName:t,IndexName:e,KeyConditionExpression:r,ExpressionAttributeValues:o,ExclusiveStartKey:u,ConsistentRead:s,ProjectionExpression:a,ExpressionAttributeNames:i,ReturnConsumedCapacity:h.INDEXES},l=new k(m),d=await this.client.send(l);return this.log("GetItemByIndex",d.ConsumedCapacity),{Items:d.Items?.map(A=>E(A))||[],lastEvaluatedKey:d.LastEvaluatedKey}}},st=O;var W={$id:"standards",definitions:{lowercaseText:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]*$"},lowercaseText10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,10}$"},lowercaseText16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,16}$"},lowercaseText30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,30}$"},lowercaseText50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,50}$"},lowercaseText256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,256}$"},text:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).*$"},text10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,10}$"},text16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,16}$"},text30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,30}$"},text50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,50}$"},text256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,256}$"},requiredText:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).+$"},requiredText10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,10}$"},requiredText16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,16}$"},requiredText30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,30}$"},requiredText50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,50}$"},requiredText256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,256}$"},url:{type:"string",pattern:"^https://[^\\s/$.?#].[^\\s]*$",maxLength:2048},uuid:{type:"string",minLength:1,pattern:"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},productKey:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"},variantId:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"},firstName:{$ref:"#/definitions/requiredText30"},lastName:{$ref:"#/definitions/text30"},phone:{type:"string",pattern:"^[0-9]{10}$"},email:{type:"string",pattern:"^[^\\s]+@[^\\s]+\\.[^\\s]+$"},addressLine1:{$ref:"#/definitions/requiredText50"},addressLine2:{$ref:"#/definitions/text50"},city:{$ref:"#/definitions/requiredText30"},postalCode:{$ref:"#/definitions/requiredText16"},state:{type:"string",enum:["AP","AR","AS","BR","CT","GA","GJ","HR","HP","JH","KA","KL","MP","MH","MN","ML","MZ","NL","OR","PB","RJ","SK","TN","TG","TR","UP","UT","WB","AN","CH","DH","LD","DL","PY","LA","JK"]},country:{type:"string",enum:["IN"]},currency:{type:"string",enum:["INR"]},locale:{type:"string",enum:["en-IN"]},addressType:{type:"string",enum:["shipping","billing","shipping&billing"]},address:{type:"object",properties:{firstName:{$ref:"standards#/definitions/firstName"},lastName:{$ref:"standards#/definitions/lastName"},phone:{$ref:"standards#/definitions/phone"},email:{$ref:"standards#/definitions/email"},addressLine1:{$ref:"standards#/definitions/addressLine1"},addressLine2:{$ref:"standards#/definitions/addressLine2"},city:{$ref:"standards#/definitions/city"},postalCode:{$ref:"standards#/definitions/postalCode"},state:{$ref:"standards#/definitions/state"},country:{$ref:"standards#/definitions/country"}},required:["firstName","lastName","phone","email","addressLine1","postalCode","state","country"]}}};var at={getStandardSchemaDefinition(){return W}},ot=at;import{importPKCS8 as Ct,importSPKI as G,jwtVerify as H,SignJWT as St}from"jose";var c=Object.freeze({INVALID_UUID:"Invalid UUID",INVALID_EMAIL:"Invalid Email",INVALID_TOKEN:"Invalid Token",TOKEN_EXPIRED:"Token Expired",INVALID_VERIFIER:"Invalid Verifier",INVALID_PERMISSIONS:"Invalid Permissions",INVALID_AUTH_TYPE:"Invalid Authorization Type",USER_PRIVATE_KEY_NOT_FOUND:"User Private Key Not Found",USER_PUBLIC_KEY_NOT_FOUND:"User Public Key Not Found",ANONYMOUS_PRIVATE_KEY_NOT_FOUND:"Anonymous Private Key Not Found",ANONYMOUS_PUBLIC_KEY_NOT_FOUND:"Anonymous Public Key Not Found",SYSTEM_PRIVATE_KEY_NOT_FOUND:"System Private Key Not Found",SYSTEM_PUBLIC_KEY_NOT_FOUND:"System Public Key Not Found",ADMIN_PRIVATE_KEY_NOT_FOUND:"Admin Private Key Not Found",ADMIN_PUBLIC_KEY_NOT_FOUND:"Admin Public Key Not Found",SECRET_TOKEN_NOT_FOUND:"Secret Token Not Found",ANONYMOUS_SESSION_NOT_ALLOWED:"Anonymous Session Not Allowed",USER_SESSION_NOT_ALLOWED:"User Session Not Allowed",SYSTEM_SESSION_NOT_ALLOWED:"System Session Not Allowed",CDN_SESSION_NOT_ALLOWED:"CDN Session Not Allowed",INTERNAL_SERVER_ERROR:"Internal Server Error",SOMETHING_WENT_WRONG:"Something went wrong"});import ut from"node:util";var C={logException:(n,t)=>{console.error(`Exception Occurred in Function: ${n}, Error: ${C.inspect(t)}`)},logError:(n,t)=>{console.error(`Error Occurred in Function: ${n}, Error: ${C.inspect(t)}`)},logWarning:(n,t)=>{console.warn(`Warning in Function: ${n} - ${C.inspect(t)}`)},logMessage:(n,t)=>{console.log(`Message in Function: ${n} - ${C.inspect(t)}`)},logInvalidPayload:(n,t)=>{console.error(`Invalid Payload received for Function: ${n}, Error: ${C.inspect(t)}`)},inspect:n=>typeof n=="string"?n:ut.inspect(n)},I=C;import lt from"crypto";var R=new Uint8Array(256),_=R.length;function v(){return _>R.length-16&&(lt.randomFillSync(R),_=0),R.slice(_,_+=16)}var Y=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function ct(n){return typeof n=="string"&&Y.test(n)}var J=ct;var f=[];for(let n=0;n<256;++n)f.push((n+256).toString(16).slice(1));function K(n,t=0){return f[n[t+0]]+f[n[t+1]]+f[n[t+2]]+f[n[t+3]]+"-"+f[n[t+4]]+f[n[t+5]]+"-"+f[n[t+6]]+f[n[t+7]]+"-"+f[n[t+8]]+f[n[t+9]]+"-"+f[n[t+10]]+f[n[t+11]]+f[n[t+12]]+f[n[t+13]]+f[n[t+14]]+f[n[t+15]]}function mt(n){if(!J(n))throw TypeError("Invalid UUID");let t,e=new Uint8Array(16);return e[0]=(t=parseInt(n.slice(0,8),16))>>>24,e[1]=t>>>16&255,e[2]=t>>>8&255,e[3]=t&255,e[4]=(t=parseInt(n.slice(9,13),16))>>>8,e[5]=t&255,e[6]=(t=parseInt(n.slice(14,18),16))>>>8,e[7]=t&255,e[8]=(t=parseInt(n.slice(19,23),16))>>>8,e[9]=t&255,e[10]=(t=parseInt(n.slice(24,36),16))/1099511627776&255,e[11]=t/4294967296&255,e[12]=t>>>24&255,e[13]=t>>>16&255,e[14]=t>>>8&255,e[15]=t&255,e}var j=mt;function dt(n){n=unescape(encodeURIComponent(n));let t=[];for(let e=0;e<n.length;++e)t.push(n.charCodeAt(e));return t}var yt="6ba7b810-9dad-11d1-80b4-00c04fd430c8",pt="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function U(n,t,e){function r(s,a,i,o){var u;if(typeof s=="string"&&(s=dt(s)),typeof a=="string"&&(a=j(a)),((u=a)===null||u===void 0?void 0:u.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let m=new Uint8Array(16+s.length);if(m.set(a),m.set(s,a.length),m=e(m),m[6]=m[6]&15|t,m[8]=m[8]&63|128,i){o=o||0;for(let l=0;l<16;++l)i[o+l]=m[l];return i}return K(m)}try{r.name=n}catch{}return r.DNS=yt,r.URL=pt,r}import gt from"crypto";var b={randomUUID:gt.randomUUID};function ft(n,t,e){if(b.randomUUID&&!t&&!n)return b.randomUUID();n=n||{};let r=n.random||(n.rng||v)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){e=e||0;for(let s=0;s<16;++s)t[e+s]=r[s];return t}return K(r)}var D=ft;import It from"crypto";function ht(n){return Array.isArray(n)?n=Buffer.from(n):typeof n=="string"&&(n=Buffer.from(n,"utf8")),It.createHash("sha1").update(n).digest()}var B=ht;var Et=U("v5",80,B),w=Et;var Tt={isUUID:n=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(n),isEmail:n=>/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(n),isURL:n=>/^(http|https):\/\/[^ "]+$/.test(n),generateUUID:(n,t)=>t&&n?w(n,t):D(),generateSearchId:(n,t)=>`${n}#${t}`,getKeyfromSearchId:n=>{let[t,e]=n.split("#");return{key:t,variantId:e}}},S=Tt;var At={handleException:(n,t,e)=>{t.knownError?(t.logError&&I.logError(n,t),e.status(t.status).json({status:t.status,error:t.error})):t.status&&t.error?(I.logException(n,t),e.status(t.status).json({...t.error,status:t.status})):(I.logException(n,t),e.status(500).json({status:500,error:c.INTERNAL_SERVER_ERROR}))},generateResponse:(n,t,e)=>({status:n,data:t,error:e}),generateError:(n,t,e=!0,r=!1)=>({status:n,error:t,knownError:e,logError:r})},T=At;import g from"assert";var Nt=async(n,t,e="GET",r={},s)=>{let a={method:e,headers:{"Content-Type":"application/json",...r}};e!=="GET"&&s&&(a.body=JSON.stringify(s));try{let i=await fetch(`${n}/${t}`,a);if(!i.ok){let u=await i.json().catch(()=>i.text());throw{status:i.status,statusText:i.statusText,error:u||{status:i.status,error:i.statusText}}}let o=await i.json();return I.logMessage("Fetch",`API call successful: URL-${n}/${t}, Status- ${i.status}`),{status:i.status,statusText:i.statusText,data:o.data}}catch(i){throw I.logError("Fetch",`API call failed: URL-${n}/${t}, Status- ${i.status||500}, Error- ${I.inspect(i.error||i)}`),{status:i.status||500,statusText:i.statusText||c.INTERNAL_SERVER_ERROR,error:i.error||{status:i.status||500,error:i.statusText||c.SOMETHING_WENT_WRONG}}}},L=Nt;var $={maxTokenAge:"30 days",userPrivateKeys:"[]",userPublicKeys:"[]",anonymousPrivateKeys:"[]",anonymousPublicKeys:"[]",systemPrivateKeys:"[]",systemPublicKeys:"[]",adminPrivateKeys:"[]",adminPublicKeys:"[]"},M={allowAnonymous:!1,allowSystem:!0,allowUser:!0,allowCDN:!1},V=class{maxTokenAge;userPrivateKeys;userPublicKeys;anonymousPrivateKeys;anonymousPublicKeys;systemPrivateKeys;systemPublicKeys;adminPrivateKeys;adminPublicKeys;constructor(t=$){let{maxTokenAge:e,userPrivateKeys:r,userPublicKeys:s,anonymousPrivateKeys:a,anonymousPublicKeys:i,systemPrivateKeys:o,systemPublicKeys:u,adminPrivateKeys:m,adminPublicKeys:l}={...$,...t};this.maxTokenAge=e,this.userPrivateKeys=JSON.parse(r),this.userPublicKeys=JSON.parse(s),this.anonymousPrivateKeys=JSON.parse(a),this.anonymousPublicKeys=JSON.parse(i),this.systemPrivateKeys=JSON.parse(o),this.systemPublicKeys=JSON.parse(u),this.adminPrivateKeys=JSON.parse(m),this.adminPublicKeys=JSON.parse(l),this.logWarnings()}logWarnings(){let t=(e,r,s)=>r.length>s&&I.logWarning("AuthUtility",`More than ${s} ${e} keys provided. This is not recommended.`);t("user private",this.userPrivateKeys,3),t("user public",this.userPublicKeys,3),t("anonymous private",this.anonymousPrivateKeys,1),t("anonymous public",this.anonymousPublicKeys,3),t("system private",this.systemPrivateKeys,1),t("system public",this.systemPublicKeys,3),t("admin private",this.adminPrivateKeys,1),t("admin public",this.adminPublicKeys,3)}async createSignedJWT(t,e,r){let s=await Ct(e,"RS256");return await new St(t).setProtectedHeader({alg:"RS256"}).setExpirationTime(r).setIssuedAt().sign(s)}async verifySignedJWT(t,e,r){for(let i=e.length-1;i>0;i--)try{let o=await G(e[i],"RS256");return(await H(t,o,{clockTolerance:30,maxTokenAge:r})).payload}catch{continue}let s=await G(e[0],"RS256");return(await H(t,s,{clockTolerance:30,maxTokenAge:r})).payload}async createAnonymousToken(t,e){g(this.anonymousPrivateKeys.length,c.ANONYMOUS_PRIVATE_KEY_NOT_FOUND),g(S.isUUID(t),c.INVALID_UUID);let r={id:t,type:"Anon",...e};return await this.createSignedJWT(r,this.anonymousPrivateKeys[this.anonymousPrivateKeys.length-1],this.maxTokenAge)}async verifyAnonymousToken(t){g(this.anonymousPublicKeys.length,c.ANONYMOUS_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.anonymousPublicKeys,this.maxTokenAge);return g(e.type==="Anon",c.INVALID_AUTH_TYPE),e}async createUserToken(t,e){g(this.userPrivateKeys.length,c.USER_PRIVATE_KEY_NOT_FOUND),g(S.isUUID(t),c.INVALID_UUID);let r={id:t,type:"User",...e};return await this.createSignedJWT(r,this.userPrivateKeys[this.userPrivateKeys.length-1],this.maxTokenAge)}async verifyUserToken(t){g(this.userPublicKeys.length,c.USER_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.userPublicKeys,this.maxTokenAge);return g(e.type==="User",c.INVALID_AUTH_TYPE),e}async createSystemToken(t,e){g(this.systemPrivateKeys.length,c.SYSTEM_PRIVATE_KEY_NOT_FOUND);let r={id:t,type:"System",...e};return await this.createSignedJWT(r,this.systemPrivateKeys[this.systemPrivateKeys.length-1],"5 min")}async verifySystemToken(t){g(this.systemPublicKeys.length,c.USER_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.systemPublicKeys,"5 min");return g(e.type==="System",c.INVALID_AUTH_TYPE),e}async createAdminToken(t,e,r){g(this.adminPrivateKeys.length,c.ADMIN_PRIVATE_KEY_NOT_FOUND),g(S.isEmail(t),c.INVALID_EMAIL),g(S.isURL(e),c.INVALID_VERIFIER);let s={email:t,type:"Admin",verifier:e,...r};return await this.createSignedJWT(s,this.adminPrivateKeys[this.adminPrivateKeys.length-1],this.maxTokenAge)}async verifyAdminToken(t,e,r){g(this.adminPublicKeys.length,c.ADMIN_PUBLIC_KEY_NOT_FOUND);let s=await this.verifySignedJWT(t,this.adminPublicKeys,this.maxTokenAge);if(g(s.type==="Admin",c.INVALID_AUTH_TYPE),r){let a=await L(s.verifier,"","POST",{},{token:t,permissions:e});if(g(a.data.isTokenValid===!0,c.INVALID_TOKEN),a.data.hasPermissions!==!0)throw T.generateError(403,c.INVALID_PERMISSIONS)}return s}AuthMiddleware(t=M,e=[]){let{allowAnonymous:r,allowSystem:s,allowUser:a,allowCDN:i}={...M,...t};return async(o,u,m)=>{try{let[l,d]=o.get("Authorization")?.split(" ")||[];if(!d)throw new Error(c.INVALID_TOKEN);let A;switch(l){case"Anon":if(!r)throw T.generateError(403,c.ANONYMOUS_SESSION_NOT_ALLOWED);A=await this.verifyAnonymousToken(d);break;case"User":if(!a)throw T.generateError(403,c.USER_SESSION_NOT_ALLOWED);A=await this.verifyUserToken(d);break;case"System":if(!s)throw T.generateError(403,c.SYSTEM_SESSION_NOT_ALLOWED);A=await this.verifySystemToken(d),I.logMessage("AuthMiddleware",`System Name - ${A.id}`);break;case"Admin":A=await this.verifyAdminToken(d,e,!0),I.logMessage("AuthMiddleware",`Admin - ${A.email}`);break;case"CDN":if(!i)throw T.generateError(403,c.CDN_SESSION_NOT_ALLOWED);g(["E3CQMOP5FX6KD1","E3TNCKKZ3FOX9W"].includes(d),c.INVALID_TOKEN),I.logMessage("AuthMiddleware",`CDN DistributionId - ${d}`);break;default:throw T.generateError(403,c.INVALID_AUTH_TYPE)}u.locals.auth={authType:l,token:d,...A},m()}catch(l){I.logError("AuthMiddleware",l),T.handleException("AuthMiddleware",T.generateError(401,l.error||c.TOKEN_EXPIRED,!0),u)}}}},xt=V;export{xt as AuthUtility,M as DefaultAuthMiddlewareConfig,$ as DefaultAuthUtilityConfig,st as DynamoDB,L as Fetch,I as Logger,T as ResponseUtility,ot as Schema,S as Utils};
1
+ import{BatchGetItemCommand as rt,DeleteItemCommand as it,DynamoDBClient as st,ExecuteStatementCommand as nt,GetItemCommand as ot,PutItemCommand as at,QueryCommand as G,ScanCommand as ut,TransactWriteItemsCommand as dt,UpdateItemCommand as ct,ReturnConsumedCapacity as f,ReturnValue as N,ReturnValuesOnConditionCheckFailure as x,ReturnItemCollectionMetrics as z}from"@aws-sdk/client-dynamodb";import{marshall as T,unmarshall as A}from"@aws-sdk/util-dynamodb";var w=class{client;returnItemCollectionMetrics;logCapacity;region;marshall=T;unmarshall=A;ReturnValue=N;ReturnItemCollectionMetrics=z;ReturnValuesOnConditionCheckFailure=x;constructor({region:t,returnItemCollectionMetrics:e=z.NONE,logCapacity:s=!1}){this.region=t,this.returnItemCollectionMetrics=e,this.logCapacity=s,this.client=new st({region:this.region})}log(t,e,s){this.logCapacity&&console.log(t,"Capacity:",e,"Size:",s)}async putItem(t,e,s,i,n,a=N.NONE,o=x.ALL_OLD){let u={TableName:t,Item:T(e,{removeUndefinedValues:!0,convertClassInstanceToMap:!0}),ConditionExpression:s,ExpressionAttributeNames:i,ExpressionAttributeValues:n,ReturnValues:a,ReturnConsumedCapacity:f.INDEXES,ReturnValuesOnConditionCheckFailure:o,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},l=new at(u),p=await this.client.send(l);return this.log("Put",p.ConsumedCapacity,p.ItemCollectionMetrics),A(p.Attributes||{})}async transactWriteItems(t){let e={TransactItems:t.map(n=>(n.Put&&(n.Put.Item=T(n.Put.Item,{removeUndefinedValues:!0,convertClassInstanceToMap:!0})),n.Update&&(n.Update.Key=T(n.Update.Key)),n.Delete&&(n.Delete.Key=T(n.Delete.Key)),n)),ReturnConsumedCapacity:f.INDEXES,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},s=new dt(e),i=await this.client.send(s);this.log("Transaction",i.ConsumedCapacity,i.ItemCollectionMetrics)}async getItem(t,e,s=!1,i,n){let a={TableName:t,Key:T(e),ConsistentRead:s,ProjectionExpression:i,ExpressionAttributeNames:n,ReturnConsumedCapacity:f.TOTAL},o=new ot(a),u=await this.client.send(o);return this.log("Read",u.ConsumedCapacity),A(u.Item||{})}async batchGetItem(t,e,s=!1,i,n){let a={RequestItems:{[t]:{Keys:e.map(l=>T(l)),ConsistentRead:s,ProjectionExpression:i,ExpressionAttributeNames:n}},ReturnConsumedCapacity:f.TOTAL},o=new rt(a),u=await this.client.send(o);return this.log("BatchRead",u.ConsumedCapacity),u.Responses?.[t]?.map(l=>A(l))||[]}async queryItems(t,e,s=!1,i,n,a,o){let u={TableName:t,KeyConditionExpression:e,ExpressionAttributeValues:a,ConsistentRead:s,ProjectionExpression:i,ExpressionAttributeNames:n,ExclusiveStartKey:o,ReturnConsumedCapacity:f.TOTAL},l=new G(u),p=await this.client.send(l);return this.log("Query",p.ConsumedCapacity),{items:p.Items?.map(m=>A(m))||[],lastEvaluatedKey:p.LastEvaluatedKey}}async scanItems(t,e,s=!1,i,n,a,o){let u={TableName:t,FilterExpression:e,ExpressionAttributeValues:a,ConsistentRead:s,ProjectionExpression:i,ExpressionAttributeNames:n,ExclusiveStartKey:o,ReturnConsumedCapacity:f.TOTAL},l=new ut(u),p=await this.client.send(l);return this.log("Scan",p.ConsumedCapacity),{items:p.Items?.map(m=>A(m))||[],lastEvaluatedKey:p.LastEvaluatedKey}}async partiQL(t,e=[],s,i=!1){let n={Statement:t,Parameters:e,ConsistentRead:i,NextToken:s,ReturnConsumedCapacity:f.INDEXES},a=new nt(n),o=await this.client.send(a);return this.log("PartiQL",o.ConsumedCapacity),{Items:o.Items?.map(u=>A(u))||[],nextToken:o.NextToken,lastEvaluatedKey:o.LastEvaluatedKey}}async updateItem(t,e,s,i,n,a,o=N.UPDATED_NEW,u=x.ALL_OLD){let l={TableName:t,Key:T(e),ConditionExpression:s,UpdateExpression:i,ExpressionAttributeNames:n,ExpressionAttributeValues:a,ReturnValues:o,ReturnConsumedCapacity:f.INDEXES,ReturnValuesOnConditionCheckFailure:u,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},p=new ct(l),m=await this.client.send(p);return this.log("Update",m.ConsumedCapacity,m.ItemCollectionMetrics),A(m.Attributes||{})}async deleteItem(t,e,s,i,n,a=N.ALL_OLD,o=x.ALL_OLD){let u={TableName:t,Key:T(e),ConditionExpression:s,ExpressionAttributeNames:i,ExpressionAttributeValues:n,ReturnValues:a,ReturnConsumedCapacity:f.INDEXES,ReturnValuesOnConditionCheckFailure:o,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},l=new it(u),p=await this.client.send(l);return this.log("Delete",p.ConsumedCapacity,p.ItemCollectionMetrics),A(p.Attributes||{})}async getItemByIndex(t,e,s,i=!1,n,a,o,u){let l={TableName:t,IndexName:e,KeyConditionExpression:s,ExpressionAttributeValues:o,ExclusiveStartKey:u,ConsistentRead:i,ProjectionExpression:n,ExpressionAttributeNames:a,ReturnConsumedCapacity:f.INDEXES},p=new G(l),m=await this.client.send(p);return this.log("GetItemByIndex",m.ConsumedCapacity),{Items:m.Items?.map(b=>A(b))||[],lastEvaluatedKey:m.LastEvaluatedKey}}},lt=w;var W={$id:"standards",definitions:{lowercaseText:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]*$"},lowercaseText10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,10}$"},lowercaseText16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,16}$"},lowercaseText30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,30}$"},lowercaseText50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,50}$"},lowercaseText256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,256}$"},text:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).*$"},text10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,10}$"},text16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,16}$"},text30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,30}$"},text50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,50}$"},text256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,256}$"},requiredText:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).+$"},requiredText10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,10}$"},requiredText16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,16}$"},requiredText30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,30}$"},requiredText50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,50}$"},requiredText256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,256}$"},url:{type:"string",pattern:"^https://[^\\s/$.?#].[^\\s]*$",maxLength:2048},uuid:{type:"string",minLength:1,pattern:"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},productKey:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"},variantId:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"},firstName:{$ref:"#/definitions/requiredText30"},lastName:{$ref:"#/definitions/text30"},phone:{type:"string",pattern:"^[0-9]{10}$"},email:{type:"string",pattern:"^[^\\s]+@[^\\s]+\\.[^\\s]+$"},addressLine1:{$ref:"#/definitions/requiredText50"},addressLine2:{$ref:"#/definitions/text50"},city:{$ref:"#/definitions/requiredText30"},postalCode:{$ref:"#/definitions/requiredText16"},state:{type:"string",enum:["AP","AR","AS","BR","CT","GA","GJ","HR","HP","JH","KA","KL","MP","MH","MN","ML","MZ","NL","OR","PB","RJ","SK","TN","TG","TR","UP","UT","WB","AN","CH","DH","LD","DL","PY","LA","JK"]},country:{type:"string",enum:["IN"]},currency:{type:"string",enum:["INR"]},locale:{type:"string",enum:["en-IN"]},addressType:{type:"string",enum:["shipping","billing","shipping&billing"]},address:{type:"object",properties:{firstName:{$ref:"standards#/definitions/firstName"},lastName:{$ref:"standards#/definitions/lastName"},phone:{$ref:"standards#/definitions/phone"},email:{$ref:"standards#/definitions/email"},addressLine1:{$ref:"standards#/definitions/addressLine1"},addressLine2:{$ref:"standards#/definitions/addressLine2"},city:{$ref:"standards#/definitions/city"},postalCode:{$ref:"standards#/definitions/postalCode"},state:{$ref:"standards#/definitions/state"},country:{$ref:"standards#/definitions/country"}},required:["firstName","lastName","phone","email","addressLine1","postalCode","state","country"]}}};var gt={getStandardSchemaDefinition(){return W}},mt=gt;import{importPKCS8 as Rt,importSPKI as j,jwtVerify as Q,SignJWT as Ot}from"jose";var g=Object.freeze({INVALID_UUID:"Invalid UUID",INVALID_EMAIL:"Invalid Email",INVALID_TOKEN:"Invalid Token",TOKEN_EXPIRED:"Token Expired",INVALID_VERIFIER:"Invalid Verifier",INVALID_PERMISSIONS:"Invalid Permissions",INVALID_AUTH_TYPE:"Invalid Authorization Type",USER_PRIVATE_KEY_NOT_FOUND:"User Private Key Not Found",USER_PUBLIC_KEY_NOT_FOUND:"User Public Key Not Found",ANONYMOUS_PRIVATE_KEY_NOT_FOUND:"Anonymous Private Key Not Found",ANONYMOUS_PUBLIC_KEY_NOT_FOUND:"Anonymous Public Key Not Found",SYSTEM_PRIVATE_KEY_NOT_FOUND:"System Private Key Not Found",SYSTEM_PUBLIC_KEY_NOT_FOUND:"System Public Key Not Found",ADMIN_PRIVATE_KEY_NOT_FOUND:"Admin Private Key Not Found",ADMIN_PUBLIC_KEY_NOT_FOUND:"Admin Public Key Not Found",SECRET_TOKEN_NOT_FOUND:"Secret Token Not Found",ANONYMOUS_SESSION_NOT_ALLOWED:"Anonymous Session Not Allowed",USER_SESSION_NOT_ALLOWED:"User Session Not Allowed",SYSTEM_SESSION_NOT_ALLOWED:"System Session Not Allowed",CDN_SESSION_NOT_ALLOWED:"CDN Session Not Allowed",INTERNAL_SERVER_ERROR:"Internal Server Error",SOMETHING_WENT_WRONG:"Something went wrong"});import ht from"node:util";var S={logException:(r,t)=>{console.error(`Exception Occurred in Function: ${r}, Error: ${S.inspect(t)}`)},logError:(r,t)=>{console.error(`Error Occurred in Function: ${r}, Error: ${S.inspect(t)}`)},logWarning:(r,t)=>{console.warn(`Warning in Function: ${r} - ${S.inspect(t)}`)},logMessage:(r,t)=>{console.log(`Message in Function: ${r} - ${S.inspect(t)}`)},logInvalidPayload:(r,t)=>{console.error(`Invalid Payload received for Function: ${r}, Error: ${S.inspect(t)}`)},inspect:r=>typeof r=="string"?r:ht.inspect(r)},I=S;import yt from"crypto";var R=new Uint8Array(256),L=R.length;function M(){return L>R.length-16&&(yt.randomFillSync(R),L=0),R.slice(L,L+=16)}var H=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function It(r){return typeof r=="string"&&H.test(r)}var Y=It;var y=[];for(let r=0;r<256;++r)y.push((r+256).toString(16).slice(1));function O(r,t=0){return y[r[t+0]]+y[r[t+1]]+y[r[t+2]]+y[r[t+3]]+"-"+y[r[t+4]]+y[r[t+5]]+"-"+y[r[t+6]]+y[r[t+7]]+"-"+y[r[t+8]]+y[r[t+9]]+"-"+y[r[t+10]]+y[r[t+11]]+y[r[t+12]]+y[r[t+13]]+y[r[t+14]]+y[r[t+15]]}function ft(r){if(!Y(r))throw TypeError("Invalid UUID");let t,e=new Uint8Array(16);return e[0]=(t=parseInt(r.slice(0,8),16))>>>24,e[1]=t>>>16&255,e[2]=t>>>8&255,e[3]=t&255,e[4]=(t=parseInt(r.slice(9,13),16))>>>8,e[5]=t&255,e[6]=(t=parseInt(r.slice(14,18),16))>>>8,e[7]=t&255,e[8]=(t=parseInt(r.slice(19,23),16))>>>8,e[9]=t&255,e[10]=(t=parseInt(r.slice(24,36),16))/1099511627776&255,e[11]=t/4294967296&255,e[12]=t>>>24&255,e[13]=t>>>16&255,e[14]=t>>>8&255,e[15]=t&255,e}var J=ft;function At(r){r=unescape(encodeURIComponent(r));let t=[];for(let e=0;e<r.length;++e)t.push(r.charCodeAt(e));return t}var Ct="6ba7b810-9dad-11d1-80b4-00c04fd430c8",bt="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function _(r,t,e){function s(i,n,a,o){var u;if(typeof i=="string"&&(i=At(i)),typeof n=="string"&&(n=J(n)),((u=n)===null||u===void 0?void 0:u.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+i.length);if(l.set(n),l.set(i,n.length),l=e(l),l[6]=l[6]&15|t,l[8]=l[8]&63|128,a){o=o||0;for(let p=0;p<16;++p)a[o+p]=l[p];return a}return O(l)}try{s.name=r}catch{}return s.DNS=Ct,s.URL=bt,s}import Tt from"crypto";var K={randomUUID:Tt.randomUUID};function St(r,t,e){if(K.randomUUID&&!t&&!r)return K.randomUUID();r=r||{};let s=r.random||(r.rng||M)();if(s[6]=s[6]&15|64,s[8]=s[8]&63|128,t){e=e||0;for(let i=0;i<16;++i)t[e+i]=s[i];return t}return O(s)}var U=St;import Dt from"crypto";function Et(r){return Array.isArray(r)?r=Buffer.from(r):typeof r=="string"&&(r=Buffer.from(r,"utf8")),Dt.createHash("sha1").update(r).digest()}var q=Et;var Pt=_("v5",80,q),B=Pt;var Nt={isUUID:r=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(r),isEmail:r=>/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r),isURL:r=>/^(http|https):\/\/[^ "]+$/.test(r),generateUUID:(r,t)=>t&&r?B(r,t):U(),generateSearchId:(r,t)=>`${r}#${t}`,getKeyfromSearchId:r=>{let[t,e]=r.split("#");return{key:t,variantId:e}}},D=Nt;var xt={handleException:(r,t,e)=>{t.knownError?(t.logError&&I.logError(r,t),e.status(t.status).json({status:t.status,error:t.error})):t.status&&t.error?(I.logException(r,t),e.status(t.status).json({...t.error,status:t.status})):(I.logException(r,t),e.status(500).json({status:500,error:g.INTERNAL_SERVER_ERROR}))},generateResponse:(r,t,e)=>({status:r,data:t,error:e}),generateError:(r,t,e=!0,s=!1)=>({status:r,error:t,knownError:e,logError:s})},C=xt;import h from"assert";var Lt=async(r,t,e="GET",s={},i)=>{let n={method:e,headers:{"Content-Type":"application/json",...s}};e!=="GET"&&i&&(n.body=JSON.stringify(i));let a=`${r}${t?"/"+t:""}`;try{let o=await fetch(a,n);if(!o.ok){let l=await o.json().catch(()=>o.text());throw{status:o.status,statusText:o.statusText,error:l||{status:o.status,error:o.statusText}}}let u=await o.json();return I.logMessage("Fetch",`API call successful: URL-${a}, Status- ${o.status}`),{status:o.status,statusText:o.statusText,data:u.data}}catch(o){throw I.logError("Fetch",`API call failed: URL-${a}, Status- ${o.status||500}, Error- ${I.inspect(o.error||o)}`),{status:o.status||500,statusText:o.statusText||g.INTERNAL_SERVER_ERROR,error:o.error||{status:o.status||500,error:o.statusText||g.SOMETHING_WENT_WRONG}}}},V=Lt;var F={maxTokenAge:"30 days",userPrivateKeys:"[]",userPublicKeys:"[]",anonymousPrivateKeys:"[]",anonymousPublicKeys:"[]",systemPrivateKeys:"[]",systemPublicKeys:"[]",adminPrivateKeys:"[]",adminPublicKeys:"[]"},$={allowAnonymous:!1,allowSystem:!0,allowUser:!0,allowCDN:!1},k=class{maxTokenAge;userPrivateKeys;userPublicKeys;anonymousPrivateKeys;anonymousPublicKeys;systemPrivateKeys;systemPublicKeys;adminPrivateKeys;adminPublicKeys;constructor(t=F){let{maxTokenAge:e,userPrivateKeys:s,userPublicKeys:i,anonymousPrivateKeys:n,anonymousPublicKeys:a,systemPrivateKeys:o,systemPublicKeys:u,adminPrivateKeys:l,adminPublicKeys:p}={...F,...t};this.maxTokenAge=e,this.userPrivateKeys=JSON.parse(s),this.userPublicKeys=JSON.parse(i),this.anonymousPrivateKeys=JSON.parse(n),this.anonymousPublicKeys=JSON.parse(a),this.systemPrivateKeys=JSON.parse(o),this.systemPublicKeys=JSON.parse(u),this.adminPrivateKeys=JSON.parse(l),this.adminPublicKeys=JSON.parse(p),this.logWarnings()}logWarnings(){let t=(e,s,i)=>s.length>i&&I.logWarning("AuthUtility",`More than ${i} ${e} keys provided. This is not recommended.`);t("user private",this.userPrivateKeys,3),t("user public",this.userPublicKeys,3),t("anonymous private",this.anonymousPrivateKeys,1),t("anonymous public",this.anonymousPublicKeys,3),t("system private",this.systemPrivateKeys,1),t("system public",this.systemPublicKeys,3),t("admin private",this.adminPrivateKeys,1),t("admin public",this.adminPublicKeys,3)}async createSignedJWT(t,e,s){let i=await Rt(e,"RS256");return await new Ot(t).setProtectedHeader({alg:"RS256"}).setExpirationTime(s).setIssuedAt().sign(i)}async verifySignedJWT(t,e,s){for(let a=e.length-1;a>0;a--)try{let o=await j(e[a],"RS256");return(await Q(t,o,{clockTolerance:30,maxTokenAge:s})).payload}catch{continue}let i=await j(e[0],"RS256");return(await Q(t,i,{clockTolerance:30,maxTokenAge:s})).payload}async createAnonymousToken(t,e){h(this.anonymousPrivateKeys.length,g.ANONYMOUS_PRIVATE_KEY_NOT_FOUND),h(D.isUUID(t),g.INVALID_UUID);let s={id:t,type:"Anon",...e};return await this.createSignedJWT(s,this.anonymousPrivateKeys[this.anonymousPrivateKeys.length-1],this.maxTokenAge)}async verifyAnonymousToken(t){h(this.anonymousPublicKeys.length,g.ANONYMOUS_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.anonymousPublicKeys,this.maxTokenAge);return h(e.type==="Anon",g.INVALID_AUTH_TYPE),e}async createUserToken(t,e){h(this.userPrivateKeys.length,g.USER_PRIVATE_KEY_NOT_FOUND),h(D.isUUID(t),g.INVALID_UUID);let s={id:t,type:"User",...e};return await this.createSignedJWT(s,this.userPrivateKeys[this.userPrivateKeys.length-1],this.maxTokenAge)}async verifyUserToken(t){h(this.userPublicKeys.length,g.USER_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.userPublicKeys,this.maxTokenAge);return h(e.type==="User",g.INVALID_AUTH_TYPE),e}async createSystemToken(t,e){h(this.systemPrivateKeys.length,g.SYSTEM_PRIVATE_KEY_NOT_FOUND);let s={id:t,type:"System",...e};return await this.createSignedJWT(s,this.systemPrivateKeys[this.systemPrivateKeys.length-1],"5 min")}async verifySystemToken(t){h(this.systemPublicKeys.length,g.USER_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.systemPublicKeys,"5 min");return h(e.type==="System",g.INVALID_AUTH_TYPE),e}async createAdminToken(t,e,s){h(this.adminPrivateKeys.length,g.ADMIN_PRIVATE_KEY_NOT_FOUND),h(D.isEmail(t),g.INVALID_EMAIL),h(D.isURL(e),g.INVALID_VERIFIER);let i={email:t,type:"Admin",verifier:e,...s};return await this.createSignedJWT(i,this.adminPrivateKeys[this.adminPrivateKeys.length-1],this.maxTokenAge)}async verifyAdminToken(t,e,s){h(this.adminPublicKeys.length,g.ADMIN_PUBLIC_KEY_NOT_FOUND);let i=await this.verifySignedJWT(t,this.adminPublicKeys,this.maxTokenAge);if(h(i.type==="Admin",g.INVALID_AUTH_TYPE),s){let n=await V(i.verifier,"","POST",{},{token:t,permissions:e});if(h(n.data.isTokenValid===!0,g.INVALID_TOKEN),n.data.hasPermissions!==!0)throw C.generateError(403,g.INVALID_PERMISSIONS)}return i}AuthMiddleware(t=$,e=[]){let{allowAnonymous:s,allowSystem:i,allowUser:n,allowCDN:a}={...$,...t};return async(o,u,l)=>{try{let[p,m]=o.get("Authorization")?.split(" ")||[];if(!m)throw new Error(g.INVALID_TOKEN);let b;switch(p){case"Anon":if(!s)throw C.generateError(403,g.ANONYMOUS_SESSION_NOT_ALLOWED);b=await this.verifyAnonymousToken(m);break;case"User":if(!n)throw C.generateError(403,g.USER_SESSION_NOT_ALLOWED);b=await this.verifyUserToken(m);break;case"System":if(!i)throw C.generateError(403,g.SYSTEM_SESSION_NOT_ALLOWED);b=await this.verifySystemToken(m),I.logMessage("AuthMiddleware",`System Name - ${b.id}`);break;case"Admin":b=await this.verifyAdminToken(m,e,!0),I.logMessage("AuthMiddleware",`Admin - ${b.email}`);break;case"CDN":if(!a)throw C.generateError(403,g.CDN_SESSION_NOT_ALLOWED);h(["E3CQMOP5FX6KD1","E3TNCKKZ3FOX9W"].includes(m),g.INVALID_TOKEN),I.logMessage("AuthMiddleware",`CDN DistributionId - ${m}`);break;default:throw C.generateError(403,g.INVALID_AUTH_TYPE)}u.locals.auth={authType:p,token:m,...b},l()}catch(p){I.logError("AuthMiddleware",p),C.handleException("AuthMiddleware",C.generateError(401,p.error||g.TOKEN_EXPIRED,!0),u)}}}},vt=k;var wt=(i=>(i.BILLING="billing",i.SHIPPING="shipping",i.BILLING_AND_SHIPPING="billing&shipping",i.NONE="none",i))(wt||{});var Mt=(n=>(n.THUMBNAIL="thumbnail",n.SMALL="small",n.MEDIUM="medium",n.LARGE="large",n.ORIGINAL="original",n))(Mt||{});var Kt=(t=>(t.IN="IN",t))(Kt||{}),Ut=(t=>(t.INR="INR",t))(Ut||{}),Bt=(r=>(r["en-IN"]="en-IN",r))(Bt||{}),v={IN:"INR"},Z={INR:"\u20B9"},Vt=(a=>(a.MALE="Male",a.FEMALE="Female",a.UNISEX="Unisex",a.KIDS="Kids",a.BOY="Boy",a.GIRL="Girl",a))(Vt||{});var P=class r{price;country;constructor(t,e){if(this.country=e,t<0)throw new Error("InvalidPrice: Price cannot be negative.");this.price=t}getCountry(){return this.country}getRoundedPrice(){return r.getRoundedPrice(this.price,this.country)}getFormattedString(t,e={}){let s=e.displayAsInteger??!1,i=v[this.country];if(i===void 0)throw new Error("Currency mapping not found for CountryCode");let n=this.price,a=s?0:r.getDecimalPlaces(i),o={style:"currency",currency:i,signDisplay:"never",currencyDisplay:e.currencyDisplay,minimumFractionDigits:a,maximumFractionDigits:a};s&&(n=Math.round(n));try{return new Intl.NumberFormat(t,o).format(n)}catch(u){return console.error(`Error formatting price for locale "${t}" and currency "${i}":`,u),`${Z[i]??i} ${r.addThousandSeparators(n.toFixed(a))}`}}static getDecimalPlaces(t){switch(t){case"INR":default:return 2}}static addThousandSeparators(t){let e=t.split("."),s=e[0],i=e.length>1?"."+e[1]:"";return s.replace(/\B(?=(\d{3})+(?!\d))/g,",")+i}static getRoundedPrice(t,e){if(t<0)throw new Error("Price cannot be negative for rounding.");let s=v[e];if(s===void 0)throw new Error(`Currency mapping not found for CountryCode: ${e}`);let i=r.getDecimalPlaces(s),n=Math.pow(10,i);return Math.round(t*n)/n}static getCurrency(t){return v[t]}};P.getRoundedPrice(-1,"IN");var Ft=(e=>(e.COUPON="coupon",e.AUTOMATIC="automatic",e))(Ft||{}),X=(e=>(e.FLAT="flat",e.PERCENTAGE="percentage",e))(X||{}),tt=(e=>(e.SHIPPING="SHIPPING",e.CUSTOMER="CUSTOMER",e))(tt||{}),$t=(e=>(e.ALL="all",e.FTB="ftb",e))($t||{});var zt=(i=>(i.ACTIVE="ACTIVE",i.FROZEN="FROZEN",i.MERGED="MERGED",i.ORDERED="ORDERED",i))(zt||{}),et=class extends Error{constructor(t){super(`Line item with ID '${t}' not found in the cart.`),this.name="LineItemNotFoundError"}},ni={expiresAtInSeconds:120*24*60*60};var Wt=(a=>(a.CREATED="CREATED",a.REGISTERED_USER="REGISTERED_USER",a.ACTIVATED_USER="ACTIVATED_USER",a.EMAIL_OTP="EMAIL_OTP",a.EMAIL_PASSWORD="EMAIL_PASSWORD",a.PHONE_OTP="PHONE_OTP",a))(Wt||{});var Ht=(u=>(u.PENDING_PAYMENT="PENDING_PAYMENT",u.PROCESSING="PROCESSING",u.SHIPPED="SHIPPED",u.PARTIALLY_SHIPPED="PARTIALLY_SHIPPED",u.DELIVERED="DELIVERED",u.CANCELLED="CANCELLED",u.RETURNED="RETURNED",u.REFUNDED="REFUNDED",u))(Ht||{});var Yt=(a=>(a.PENDING="PENDING",a.AUTHORIZED="AUTHORIZED",a.CAPTURED="CAPTURED",a.FAILED="FAILED",a.REFUNDED="REFUNDED",a.PARTIALLY_REFUNDED="PARTIALLY_REFUNDED",a))(Yt||{}),Jt=(o=>(o.PAY_LATER="PAY_LATER",o.CARD="CARD",o.CASH="CASH",o.NET_BANKING="NET_BANKING",o.WALLET="WALLET",o.COD="COD",o.UNKNOWN="UNKNOWN",o))(Jt||{});export{wt as AddressType,$t as ApplicableTo,vt as AuthUtility,zt as CartState,v as CountryCurrencyMap,tt as CouponCategory,X as CouponDiscountMethod,Ft as CouponType,Z as CurrencySymbolMap,Wt as CustomerStatus,ni as DEFAULT_CART_CONFIG,$ as DefaultAuthMiddlewareConfig,F as DefaultAuthUtilityConfig,lt as DynamoDB,V as Fetch,Vt as GenderCategory,Mt as ImageResolution,et as LineItemNotFoundError,I as Logger,Kt as OperationalCountry,Ut as OperationalCountryCurrency,Bt as OperationalLocale,Ht as OrderState,Jt as PaymentMode,Yt as PaymentStatus,C as ResponseUtility,mt as Schema,D as Utils};
2
2
  //# sourceMappingURL=index.mjs.map