@azure/functions-extensions-servicebus
Version:
Node.js Azure ServiceBus extension implementations for Azure Functions
2 lines • 20.5 kB
JavaScript
(()=>{"use strict";var e={777(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SETTLEMENT_PROTO_CONTENT=void 0,t.SETTLEMENT_PROTO_CONTENT='\nsyntax = "proto3";\n\nimport "google/protobuf/empty.proto";\nimport "google/protobuf/wrappers.proto";\nimport "google/protobuf/timestamp.proto";\n\n// this namespace will be shared between isolated worker and WebJobs extension so make it somewhat generic\noption csharp_namespace = "Microsoft.Azure.ServiceBus.Grpc";\n\n// The settlement service definition.\nservice Settlement {\n // Completes a message\n rpc Complete (CompleteRequest) returns (google.protobuf.Empty) {}\n\n // Abandons a message\n rpc Abandon (AbandonRequest) returns (google.protobuf.Empty) {}\n\n // Deadletters a message\n rpc Deadletter (DeadletterRequest) returns (google.protobuf.Empty) {}\n\n // Defers a message\n rpc Defer (DeferRequest) returns (google.protobuf.Empty) {}\n\n // Renew message lock\n rpc RenewMessageLock (RenewMessageLockRequest) returns (google.protobuf.Empty) {}\n\n // Get session state\n rpc GetSessionState (GetSessionStateRequest) returns (GetSessionStateResponse) {}\n\n // Set session state\n rpc SetSessionState (SetSessionStateRequest) returns (google.protobuf.Empty) {}\n\n // Release session\n rpc ReleaseSession (ReleaseSessionRequest) returns (google.protobuf.Empty) {}\n\n // Renew session lock\n rpc RenewSessionLock (RenewSessionLockRequest) returns (RenewSessionLockResponse) {}\n}\n\n// The complete message request containing the locktoken.\nmessage CompleteRequest {\n string locktoken = 1;\n}\n\n// The abandon message request containing the locktoken and properties to modify.\nmessage AbandonRequest {\n string locktoken = 1;\n bytes propertiesToModify = 2;\n}\n\n// The deadletter message request containing the locktoken and properties to modify along with the reason/description.\nmessage DeadletterRequest {\n string locktoken = 1;\n bytes propertiesToModify = 2;\n google.protobuf.StringValue deadletterReason = 3;\n google.protobuf.StringValue deadletterErrorDescription = 4;\n}\n\n// The defer message request containing the locktoken and properties to modify.\nmessage DeferRequest {\n string locktoken = 1;\n bytes propertiesToModify = 2;\n}\n\n// The renew message lock request containing the locktoken.\nmessage RenewMessageLockRequest {\n string locktoken = 1;\n}\n\n// The get message request.\nmessage GetSessionStateRequest {\n string sessionId = 1;\n}\n\n// The set message request.\nmessage SetSessionStateRequest {\n string sessionId = 1;\n bytes sessionState = 2;\n}\n\n// Get response containing the session state.\nmessage GetSessionStateResponse {\n bytes sessionState = 1;\n}\n\n// Release session.\nmessage ReleaseSessionRequest {\n string sessionId = 1;\n}\n\n// Renew session lock.\nmessage RenewSessionLockRequest {\n string sessionId = 1;\n}\n\n// Renew session lock.\nmessage RenewSessionLockResponse {\n google.protobuf.Timestamp lockedUntil = 1;\n}\n'},479(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.createGrpcClient=void 0;const i=s(n(437)),a=s(n(237)),c=s(n(21)),u=s(n(820)),l=s(n(873)),d=n(777);let p=null;t.createGrpcClient=function({serviceName:e,address:t,credentials:n=i.credentials.createInsecure(),grpcMaxMessageLength:r}){if(!p){const e=u.tmpdir(),t=l.join(e,"settlement.proto");try{c.writeFileSync(t,d.SETTLEMENT_PROTO_CONTENT);const n=a.loadSync(t,{keepCase:!1,longs:String,enums:String,defaults:!0,oneofs:!0,includeDirs:[e]});p=i.loadPackageDefinition(n)}finally{try{c.unlinkSync(t)}catch(e){}}}const o=p[e];if(!o)throw new Error(`Service "${e}" not found in embedded proto definition`);return new o(t,n,{"grpc.max_send_message_length":r,"grpc.max_receive_message_length":r})}},409(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))(function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}c((r=r.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:!0}),t.ServiceBusMessageActions=void 0;const a=s(n(437)),c=n(479),u=n(855),l=n(232);class d{constructor(){const{uri:e,grpcMaxMessageLength:t}=l.GrpcUriBuilder.build();this.client=(0,c.createGrpcClient)({serviceName:"Settlement",address:e,credentials:a.credentials.createInsecure(),grpcMaxMessageLength:t})}static getInstance(){return d.instance||(d.instance=new d),d.instance}validateLockToken(e){const t=e.lockToken;if(!t)throw new Error("ArgumentException: lockToken is required in ServiceBusReceivedMessage.");return t}complete(e){return i(this,void 0,void 0,function*(){const t=this.validateLockToken(e);return new Promise((e,n)=>{const r={locktoken:t};this.client.complete(r,t=>{t?(console.error("Complete request failed:",{code:t.code,message:t.message,details:t.details}),n(t)):e()})})})}abandon(e,t){return i(this,void 0,void 0,function*(){const n=this.validateLockToken(e),r=(0,u.encodePropertiesForOperation)(t,"abandon");return new Promise((e,t)=>{const o={locktoken:n,propertiesToModify:r};this.client.abandon(o,n=>{n?(console.error("Abandon request failed:",{code:n.code,message:n.message,details:n.details}),t(n)):e()})})})}deadletter(e,t,n,r){return i(this,void 0,void 0,function*(){const o=this.validateLockToken(e),s=(0,u.encodePropertiesForOperation)(t,"deadletter");return new Promise((e,t)=>{const i={locktoken:o,propertiesToModify:s,deadletterReason:n?{value:n}:void 0,deadletterErrorDescription:r?{value:r}:void 0};this.client.deadletter(i,n=>{n?(console.error("Deadletter request failed:",{code:n.code,message:n.message,details:n.details}),t(n)):e()})})})}defer(e,t){return i(this,void 0,void 0,function*(){const n=this.validateLockToken(e),r=(0,u.encodePropertiesForOperation)(t,"defer");return new Promise((e,t)=>{const o={locktoken:n,propertiesToModify:r};this.client.defer(o,n=>{n?(console.error("Defer request failed:",{code:n.code,message:n.message,details:n.details}),t(n)):e()})})})}renewMessageLock(e){return i(this,void 0,void 0,function*(){const t=this.validateLockToken(e);return new Promise((e,n)=>{const r={locktoken:t};this.client.renewMessageLock(r,t=>{t?(console.error("Renew message lock request failed:",{code:t.code,message:t.message,details:t.details}),n(t)):e()})})})}setSessionState(e,t){return i(this,void 0,void 0,function*(){return new Promise((n,r)=>{const o={sessionId:e,sessionState:t};this.client.setSessionState(o,e=>{e?(console.error("Set session state request failed:",{code:e.code,message:e.message,details:e.details}),r(e)):n()})})})}releaseSession(e){return i(this,void 0,void 0,function*(){return new Promise((t,n)=>{const r={sessionId:e};this.client.releaseSession(r,e=>{e?(console.error("Release session request failed:",{code:e.code,message:e.message,details:e.details}),n(e)):t()})})})}renewSessionLock(e){return i(this,void 0,void 0,function*(){return new Promise((t,n)=>{const r={sessionId:e};this.client.renewSessionLock(r,(e,r)=>{if(e)console.error("Renew session lock request failed:",{code:e.code,message:e.message,details:e.details}),n(e);else if(r&&r.lockedUntil)t(r.lockedUntil);else{const e=new Error("No response or lockedUntil returned from renewSessionLock");n(e)}})})})}static resetInstance(){d.instance=null}}t.ServiceBusMessageActions=d,d.instance=null},173(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AzureServiceBusMessageFactory=void 0;const o=n(695),s=r(n(288)),i=n(843),a=n(409),c="x-opt-sequence-number",u="x-opt-offset";class l{static buildServiceBusMessageFromModelBindingData(e){const t=a.ServiceBusMessageActions.getInstance(),n=e=>{if(!e.content)throw new Error("ModelBindingData.content is null or undefined.");const{decodedMessage:t,lockToken:n}=i.ServiceBusMessageDecoder.decode(e.content);return this.createServiceBusReceivedMessageFromRhea(t,n)};return{messages:Array.isArray(e)?e.map(n):[n(e)],actions:t}}static createServiceBusReceivedMessageFromAmqp(e,t){var n,r,o,i,a,d,p,g,f,m,v,y,b,h,S,k,w,M,T,_;return{body:l.decodeAmqpBody(e.body),messageId:null===(r=null===(n=e.properties)||void 0===n?void 0:n.messageId)||void 0===r?void 0:r.toString(),correlationId:null===(i=null===(o=e.properties)||void 0===o?void 0:o.correlationId)||void 0===i?void 0:i.toString(),contentType:null===(a=e.properties)||void 0===a?void 0:a.contentType,subject:null===(d=e.properties)||void 0===d?void 0:d.subject,to:null===(p=e.properties)||void 0===p?void 0:p.to,replyTo:null===(g=e.properties)||void 0===g?void 0:g.replyTo,replyToSessionId:null===(f=e.properties)||void 0===f?void 0:f.replyToGroupId,sessionId:null===(m=e.properties)||void 0===m?void 0:m.groupId,timeToLive:null===(v=e.header)||void 0===v?void 0:v.timeToLive,applicationProperties:e.applicationProperties||{},deliveryCount:(null===(y=e.header)||void 0===y?void 0:y.deliveryCount)||0,lockToken:t,_rawAmqpMessage:e,enqueuedTimeUtc:l.extractDateFromAnnotation(null===(b=e.messageAnnotations)||void 0===b?void 0:b["x-opt-enqueued-time"]),lockedUntilUtc:l.extractDateFromAnnotation(null===(h=e.messageAnnotations)||void 0===h?void 0:h["x-opt-locked-until"]),sequenceNumber:void 0!==(null===(S=e.messageAnnotations)||void 0===S?void 0:S[c])?s.default.fromNumber(Number(e.messageAnnotations[c])):void 0,enqueuedSequenceNumber:void 0!==(null===(k=e.messageAnnotations)||void 0===k?void 0:k[u])?Number(e.messageAnnotations[u]):void 0!==(null===(w=e.messageAnnotations)||void 0===w?void 0:w[c])?Number(e.messageAnnotations[c]):void 0,deadLetterReason:null===(M=e.applicationProperties)||void 0===M?void 0:M.DeadLetterReason,deadLetterErrorDescription:null===(T=e.applicationProperties)||void 0===T?void 0:T.DeadLetterErrorDescription,deadLetterSource:null===(_=e.messageAnnotations)||void 0===_?void 0:_["x-opt-deadletter-source"],state:"active"}}static createServiceBusReceivedMessageFromRhea(e,t){const n=o.AmqpAnnotatedMessage.fromRheaMessage(e);return l.createServiceBusReceivedMessageFromAmqp(n,t)}static decodeAmqpBody(e){if("object"==typeof e&&null!==e&&"typecode"in e&&"content"in e&&"number"==typeof e.typecode&&Buffer.isBuffer(e.content)){const{typecode:t,content:n}=e;return n}return e}static extractDateFromAnnotation(e){if(null!=e)return e instanceof Date?e:"string"==typeof e||"number"==typeof e?new Date(e):void 0}}t.AzureServiceBusMessageFactory=l},469(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.registerServiceBusMessageFactory=void 0;const r=n(490),o=n(173),s="AzureServiceBusReceivedMessage";t.registerServiceBusMessageFactory=function(){try{const e=r.ResourceFactoryResolver.getInstance();e.hasResourceFactory(s)||e.registerResourceFactory(s,e=>o.AzureServiceBusMessageFactory.buildServiceBusMessageFromModelBindingData(e))}catch(e){throw new Error(`Service Bus Message Factory initialization failed: ${e instanceof Error?e.message:String(e)}`)}}},855(e,t,n){var r;Object.defineProperty(t,"__esModule",{value:!0}),t.validateAmqpProperties=t.encodePropertiesForOperation=t.convertPropertiesToAmqpBytes=void 0,function(e){e.Null="null",e.Byte="byte",e.SByte="sbyte",e.Char="char",e.Int16="int16",e.UInt16="uint16",e.Int32="int32",e.UInt32="uint32",e.Int64="int64",e.UInt64="uint64",e.Single="single",e.Double="double",e.Decimal="decimal",e.Boolean="boolean",e.Guid="guid",e.String="string",e.Uri="uri",e.DateTime="datetime",e.DateTimeOffset="datetimeoffset",e.TimeSpan="timespan",e.Stream="stream",e.Array="array",e.Unknown="unknown"}(r||(r={}));const o=new Map([["number",r.Double],["boolean",r.Boolean],["string",r.String],["bigint",r.Int64]]);function s(e,t){const r=n(978);switch(e){case"null":return null;case"boolean":case"byte":case"sbyte":case"int16":case"uint16":case"int32":case"uint32":case"single":case"double":case"char":case"string":case"guid":case"uri":case"datetime":case"datetimeoffset":case"timespan":default:return t;case"int64":case"uint64":return"bigint"==typeof t?(t>=BigInt(Number.MIN_SAFE_INTEGER)&&t<=BigInt(Number.MAX_SAFE_INTEGER)||console.warn(`BigInt value ${t} is outside safe integer range, precision may be lost`),r.types.wrap_long(Number(t))):r.types.wrap_long(t);case"decimal":return r.types.wrap_decimal128(t);case"stream":return r.types.wrap_binary(t)}}const i="Supported types: Primitives: null, boolean, string (including char, guid, uri, datetime, timespan), Numbers: byte, sbyte, int16, uint16, int32, uint32, int64, uint64, single, double, decimal, Objects: Date (datetimeoffset), URL (uri), Buffer/Uint8Array (stream), arrays of supported types";function a(e){const t=new Map;for(const[n,r]of Object.entries(e)){const e=c(r);if(null===e)throw new Error(`The key '${n}' has a value of type '${typeof r}' which is not supported for AMQP transport. ${i}`);t.set(n,e)}const r=function(e){try{const t=n(978),r={};for(const[t,n]of e.entries())if(n&&"object"==typeof n&&"type"in n&&"value"in n){const e=n;r[t]=s(e.type,e.value)}else r[t]=n;const o=t.types.wrap_map(r),i=new t.types.Writer;i.write(o);const a=i.toBuffer();return new Uint8Array(a)}catch(e){throw new Error(`Failed to encode AMQP map: ${e instanceof Error?e.message:String(e)}`)}}(t);return r}function c(e){if(null==e)return{type:"null",value:null};switch(typeof e){case"string":{const t=e;return""===t?{type:"string",value:t}:1===t.length?{type:"char",value:t}:(e=>/^[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(e))(t)?{type:"guid",value:t}:(e=>{try{return new URL(e),!0}catch(e){return!1}})(t)?{type:"uri",value:t}:(e=>/^-?(\d+\.)?(\d{2}:)?(\d{2}:)?\d{2}(\.\d{1,7})?$/.test(e))(t)?{type:"timespan",value:t}:(e=>!isNaN(Date.parse(e)))(t)?{type:"datetime",value:t}:{type:"string",value:t}}case"number":{const t=e;return Number.isFinite(t)?Number.isInteger(t)?(e=>Number.isInteger(e)&&e>=0&&e<=255)(t)?{type:"byte",value:t}:(e=>Number.isInteger(e)&&e>=-128&&e<=127)(t)?{type:"sbyte",value:t}:(e=>Number.isInteger(e)&&e>=-32768&&e<=32767)(t)?{type:"int16",value:t}:(e=>Number.isInteger(e)&&e>=0&&e<=65535)(t)?{type:"uint16",value:t}:(e=>Number.isInteger(e)&&e>=-2147483648&&e<=2147483647)(t)?{type:"int32",value:t}:(e=>Number.isInteger(e)&&e>=0&&e<=4294967295)(t)?{type:"uint32",value:t}:{type:"int64",value:BigInt(t)}:(e=>!Number.isInteger(e)&&Math.abs(e)<=34028235e31)(t)?{type:"single",value:t}:{type:"double",value:t}:t}case"boolean":return{type:"boolean",value:e};case"bigint":{const t=e;return t>=BigInt(0)&&t<=BigInt("18446744073709551615")?{type:"uint64",value:t}:{type:"int64",value:t}}case"object":return e instanceof Date?{type:"datetimeoffset",value:e.toISOString()}:e instanceof Buffer||e instanceof Uint8Array?{type:"stream",value:e}:e instanceof URL?{type:"uri",value:e.href}:null!==(t=e)&&"object"==typeof t&&"toString"in t&&("precision"in t||"scale"in t||"value"in t)?{type:"decimal",value:e}:Array.isArray(e)?e.map(e=>c(e)):null;default:return null}var t}function u(e){if(null==e)return r.Null;if(e&&"object"==typeof e&&"type"in e&&"value"in e){const t=e;return Object.values(r).find(e=>e===t.type)||r.Unknown}const t=typeof e,n=o.get(t);if(n)return n;if("object"===t){if(e instanceof Date)return r.DateTimeOffset;if(e instanceof URL)return r.Uri;if(e instanceof Buffer||e instanceof Uint8Array)return r.Stream;if(Array.isArray(e))return r.Array}return r.Unknown}t.convertPropertiesToAmqpBytes=a,t.encodePropertiesForOperation=function(e,t){if(!e||0===Object.keys(e).length)return new Uint8Array;try{return new Uint8Array(a(e))}catch(e){throw new Error(`Failed to encode properties for ${t} operation: ${e instanceof Error?e.message:String(e)}`)}},t.validateAmqpProperties=function(e){for(const[t,n]of Object.entries(e))if(u(n)===r.Unknown)throw new Error(`Property '${t}' has unsupported type '${typeof n}' for AMQP transport. ${i}`)}},232(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.GrpcUriBuilder=void 0;const r=n(776);t.GrpcUriBuilder=class{static build(){const{values:e}=(0,r.parseArgs)({args:process.argv.slice(2),options:{host:{type:"string"},port:{type:"string"},"functions-grpc-max-message-length":{type:"string"}},strict:!1}),{host:t,port:n,"functions-grpc-max-message-length":o}=e,s=[];if(t||s.push("'host'"),n||s.push("'port'"),o||s.push("'functions-grpc-max-message-length'"),s.length)throw new Error(`Missing required arguments: ${s.join(", ")}`);return{uri:`${String(t)}:${String(n)}`,grpcMaxMessageLength:Number(o)}}}},785(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.LockTokenUtil=void 0;class n{static convertToString(e){return[e.subarray(0,4).reverse().toString("hex"),e.subarray(4,6).reverse().toString("hex"),e.subarray(6,8).reverse().toString("hex"),e.subarray(8,10).toString("hex"),e.subarray(10).toString("hex")].join("-")}static extractFromMessage(e,t){const n=Buffer.isBuffer(e)?e.subarray(0,t):new Uint8Array(e.slice(0,t));return this.convertToString(Buffer.from(n.subarray(0,16)))}}t.LockTokenUtil=n,n.X_OPT_LOCK_TOKEN=Buffer.from("x-opt-lock-token")},849(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.messageBodyAsJson=t.messageBodyAsText=void 0;const n=new TextDecoder("utf-8",{fatal:!0});function r(e){const t=e.body;return Buffer.isBuffer(t)?n.decode(t):"string"==typeof t?t:JSON.stringify(t)}t.messageBodyAsText=r,t.messageBodyAsJson=function(e,t){return JSON.parse(r(e),t)}},843(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ServiceBusMessageDecoder=void 0;const o=r(n(978)),s=n(785);t.ServiceBusMessageDecoder=class{static decode(e){if(!e||0===e.length)throw new Error("Content buffer is empty");const t=e.indexOf(s.LockTokenUtil.X_OPT_LOCK_TOKEN);if(-1===t)throw new Error("Lock token not found in content");const n=s.LockTokenUtil.extractFromMessage(e,t),r=e.subarray(16),i=console.warn;try{return console.warn=()=>{},{decodedMessage:o.default.message.decode(r),lockToken:n}}finally{console.warn=i}}}},695(e){e.exports=require("@azure/core-amqp")},490(e){e.exports=require("@azure/functions-extensions-base")},437(e){e.exports=require("@grpc/grpc-js")},237(e){e.exports=require("@grpc/proto-loader")},21(e){e.exports=require("fs")},288(e){e.exports=require("long")},776(e){e.exports=require("node:util")},820(e){e.exports=require("os")},873(e){e.exports=require("path")},978(e){e.exports=require("rhea")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,n),s.exports}var r={};(()=>{var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.messageBodyAsText=e.messageBodyAsJson=e.validateAmqpProperties=e.convertPropertiesToAmqpBytes=void 0,(0,n(469).registerServiceBusMessageFactory)();var t=n(855);Object.defineProperty(e,"convertPropertiesToAmqpBytes",{enumerable:!0,get:function(){return t.convertPropertiesToAmqpBytes}}),Object.defineProperty(e,"validateAmqpProperties",{enumerable:!0,get:function(){return t.validateAmqpProperties}});var o=n(849);Object.defineProperty(e,"messageBodyAsJson",{enumerable:!0,get:function(){return o.messageBodyAsJson}}),Object.defineProperty(e,"messageBodyAsText",{enumerable:!0,get:function(){return o.messageBodyAsText}})})(),module.exports=r})();
//# sourceMappingURL=azure-functions-extensions-servicebus.min.js.map