appos 0.2.2-0 → 0.2.3-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/bin/main.mjs +3 -3
- package/dist/exports/api/workflows/extract-blob-metadata.mjs +1 -1
- package/dist/exports/api/workflows/generate-image-variant.d.mts +4 -40
- package/dist/exports/api/workflows/generate-image-variant.mjs +1 -1
- package/dist/exports/api/workflows/generate-preview.mjs +1 -1
- package/dist/exports/api/workflows/purge-attachment.mjs +1 -1
- package/dist/exports/api/workflows/purge-audit-logs.mjs +1 -1
- package/dist/exports/api/workflows/purge-unattached-blobs.mjs +1 -1
- package/dist/exports/api/workflows/track-db-changes.mjs +1 -1
- package/dist/exports/tests/packages/appos/src/api/storage.d.mts +4 -4
- package/package.json +1 -1
package/dist/bin/main.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node --import=appos/instrumentation --no-warnings
|
|
2
|
-
import{n as loadEvents}from"./event-v2sCJkNd.mjs";import{a as COMMANDS_DIR,i as APPOS_DIR,o as DATABASES_DIR,r as loadWorkflows}from"./workflow-BagSlsMp.mjs";import{createRequire,register}from"node:module";import{spawn}from"node:child_process";import path,{basename,join}from"node:path";import fs from"node:fs";import{DBOS}from"@dbos-inc/dbos-sdk";import colors from"picocolors";import fs$1,{glob}from"node:fs/promises";import{z}from"zod";import{createClient}from"redis";import*as p from"@clack/prompts";import{generateDrizzleJson,generateMigration}from"drizzle-kit/api-postgres";import{migrate}from"drizzle-orm/node-postgres/migrator";import{sql}from"drizzle-orm";import"drizzle-orm/node-postgres";import"pg";import{diag}from"@opentelemetry/api";import{ATTR_SERVICE_NAME,ATTR_SERVICE_VERSION}from"@opentelemetry/semantic-conventions";import{resourceFromAttributes}from"@opentelemetry/resources";import*as fs$2 from"fs";import*as path$1 from"path";import{Readable}from"stream";import*as zlib from"zlib";import*as repl from"node:repl";import cors from"cors";import{rateLimit}from"express-rate-limit";import helmet from"helmet";import express from"ultimate-express";import{getNodeAutoInstrumentations}from"@opentelemetry/auto-instrumentations-node";import{OTLPTraceExporter}from"@opentelemetry/exporter-trace-otlp-http";import{PinoInstrumentation}from"@opentelemetry/instrumentation-pino";import{NodeSDK}from"@opentelemetry/sdk-node";import{BatchSpanProcessor}from"@opentelemetry/sdk-trace-node";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__esmMin=(fn,res)=>()=>(fn&&(res=fn(fn=0)),res),__commonJSMin=(cb,mod)=>()=>(mod||cb((mod={exports:{}}).exports,mod),mod.exports),__export=(all,symbols)=>{let target={};for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0});return symbols&&__defProp(target,Symbol.toStringTag,{value:`Module`}),target},__copyProps=(to,from,except,desc)=>{if(from&&typeof from==`object`||typeof from==`function`)for(var keys=__getOwnPropNames(from),i=0,n=keys.length,key;i<n;i++)key=keys[i],!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:(k=>from[k]).bind(null,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__reExport=(target,mod,secondTarget)=>(__copyProps(target,mod,`default`),secondTarget&&__copyProps(secondTarget,mod,`default`)),__toCommonJS=mod=>__hasOwnProp.call(mod,`module.exports`)?mod[`module.exports`]:__copyProps(__defProp({},`__esModule`,{value:!0}),mod),__require=createRequire(import.meta.url);function defineCommandContext(args,opts,container){return{args,ask:p.text,cancel(message=`Cancelled`){p.cancel(message),process.exit(0)},choice:p.select,async cleanup(){for(let[,db]of Object.entries(container.db))await db.$client.end();for(let[,cache]of Object.entries(container.cache))await cache.disconnect();await container.eventBus.close(),container.logger.flush()},comment(message){p.log.message(colors.dim(message))},confirm:p.confirm,container,error(message){p.log.error(message)},async exec(command,args$1){return new Promise((resolve,reject)=>{let proc=spawn(command,args$1,{stdio:[`inherit`,`pipe`,`pipe`],cwd:process.cwd()}),stderr=``;proc.stderr?.on(`data`,data=>{stderr+=data.toString()}),proc.on(`close`,code=>{code===0?resolve():reject(Error(stderr||`Command failed with exit code ${code}`))}),proc.on(`error`,reject)})},fail(message){p.log.error(message),p.outro(colors.red(`Failed`)),process.exit(1)},group:p.group,info(message){p.log.info(message)},intro(title){p.intro(title)},isCancel:p.isCancel,line(message){p.log.message(message)},multiselect:p.multiselect,note(message,title){p.note(message,title)},opts,outro(message=`Done`){p.outro(message)},secret:p.password,async spinner(message,fn){let s=p.spinner();s.start(message);try{let result=await fn();return s.stop(message),result}catch(error){throw s.stop(message,1),error}},step(message){p.log.step(message)},success(message){p.log.success(message)},table(headers,rows){let colWidths=headers.map((h,i)=>Math.max(h.length,...rows.map(r=>(r[i]||``).length))),lines=[headers.map((h,i)=>h.padEnd(colWidths[i])).join(` │ `),colWidths.map(w=>`─`.repeat(w)).join(`─┼─`),...rows.map(row=>row.map((cell,i)=>(cell||``).padEnd(colWidths[i])).join(` │ `))];p.note(lines.join(`
|
|
2
|
+
import{n as loadEvents}from"./event-v2sCJkNd.mjs";import{a as COMMANDS_DIR,i as APPOS_DIR,o as DATABASES_DIR,r as loadWorkflows}from"./workflow-BagSlsMp.mjs";import{createRequire,register}from"node:module";import{spawn}from"node:child_process";import path,{basename,dirname,join}from"node:path";import fs from"node:fs";import{DBOS}from"@dbos-inc/dbos-sdk";import colors from"picocolors";import fs$1,{glob}from"node:fs/promises";import{z}from"zod";import{createClient}from"redis";import*as p from"@clack/prompts";import{generateDrizzleJson,generateMigration}from"drizzle-kit/api-postgres";import{migrate}from"drizzle-orm/node-postgres/migrator";import{sql}from"drizzle-orm";import"drizzle-orm/node-postgres";import"pg";import{diag}from"@opentelemetry/api";import{ATTR_SERVICE_NAME,ATTR_SERVICE_VERSION}from"@opentelemetry/semantic-conventions";import{resourceFromAttributes}from"@opentelemetry/resources";import*as fs$2 from"fs";import*as path$1 from"path";import{Readable}from"stream";import*as zlib from"zlib";import*as repl from"node:repl";import cors from"cors";import{rateLimit}from"express-rate-limit";import helmet from"helmet";import express from"ultimate-express";import{getNodeAutoInstrumentations}from"@opentelemetry/auto-instrumentations-node";import{OTLPTraceExporter}from"@opentelemetry/exporter-trace-otlp-http";import{PinoInstrumentation}from"@opentelemetry/instrumentation-pino";import{NodeSDK}from"@opentelemetry/sdk-node";import{BatchSpanProcessor}from"@opentelemetry/sdk-trace-node";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__esmMin=(fn,res)=>()=>(fn&&(res=fn(fn=0)),res),__commonJSMin=(cb,mod)=>()=>(mod||cb((mod={exports:{}}).exports,mod),mod.exports),__export=(all,symbols)=>{let target={};for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0});return symbols&&__defProp(target,Symbol.toStringTag,{value:`Module`}),target},__copyProps=(to,from,except,desc)=>{if(from&&typeof from==`object`||typeof from==`function`)for(var keys=__getOwnPropNames(from),i=0,n=keys.length,key;i<n;i++)key=keys[i],!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:(k=>from[k]).bind(null,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__reExport=(target,mod,secondTarget)=>(__copyProps(target,mod,`default`),secondTarget&&__copyProps(secondTarget,mod,`default`)),__toCommonJS=mod=>__hasOwnProp.call(mod,`module.exports`)?mod[`module.exports`]:__copyProps(__defProp({},`__esModule`,{value:!0}),mod),__require=createRequire(import.meta.url);function defineCommandContext(args,opts,container){return{args,ask:p.text,cancel(message=`Cancelled`){p.cancel(message),process.exit(0)},choice:p.select,async cleanup(){for(let[,db]of Object.entries(container.db))await db.$client.end();for(let[,cache]of Object.entries(container.cache))await cache.disconnect();await container.eventBus.close(),container.logger.flush()},comment(message){p.log.message(colors.dim(message))},confirm:p.confirm,container,error(message){p.log.error(message)},async exec(command,args$1){return new Promise((resolve,reject)=>{let proc=spawn(command,args$1,{stdio:[`inherit`,`pipe`,`pipe`],cwd:process.cwd()}),stderr=``;proc.stderr?.on(`data`,data=>{stderr+=data.toString()}),proc.on(`close`,code=>{code===0?resolve():reject(Error(stderr||`Command failed with exit code ${code}`))}),proc.on(`error`,reject)})},fail(message){p.log.error(message),p.outro(colors.red(`Failed`)),process.exit(1)},group:p.group,info(message){p.log.info(message)},intro(title){p.intro(title)},isCancel:p.isCancel,line(message){p.log.message(message)},multiselect:p.multiselect,note(message,title){p.note(message,title)},opts,outro(message=`Done`){p.outro(message)},secret:p.password,async spinner(message,fn){let s=p.spinner();s.start(message);try{let result=await fn();return s.stop(message),result}catch(error){throw s.stop(message,1),error}},step(message){p.log.step(message)},success(message){p.log.success(message)},table(headers,rows){let colWidths=headers.map((h,i)=>Math.max(h.length,...rows.map(r=>(r[i]||``).length))),lines=[headers.map((h,i)=>h.padEnd(colWidths[i])).join(` │ `),colWidths.map(w=>`─`.repeat(w)).join(`─┼─`),...rows.map(row=>row.map((cell,i)=>(cell||``).padEnd(colWidths[i])).join(` │ `))];p.note(lines.join(`
|
|
3
3
|
`))},async task(name,fn){let start=Date.now(),result=await fn(),elapsed=Date.now()-start,maxWidth=45,suffix=`${elapsed}ms DONE`,dots=`.`.repeat(Math.max(1,45-name.length-suffix.length));return p.log.message(`${name} ${colors.dim(dots)} ${colors.green(suffix)}`,{symbol:colors.green(`◆`)}),result},taskStatus(name,status){let dots=`.`.repeat(Math.max(1,45-name.length-status.length));p.log.message(`${name} ${colors.dim(dots)} ${colors.dim(status)}`,{symbol:colors.dim(`◇`)})},warn(message){p.log.warn(message)}}}function defineCommand(def){return{aliases:def.aliases||[],description:def.description,args:def.args||[],opts:def.opts||{},run:def.run}}var build_default=defineCommand({description:`Build the application for production deployment`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`build`),ctx.outro()}});const migrationsSchema=`public`;function defineMigrationOpts(name,type=`schema`){let folder=type===`schema`?`schema-migrations`:`data-migrations`,table=type===`schema`?`schema-migrations`:`data-migrations`;return{migrationsFolder:`${join(APPOS_DIR,DATABASES_DIR)}/${name}/${folder}`,migrationsSchema:`public`,migrationsTable:table}}var require_error=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.getDBOSErrorCode=exports.DBOSInvalidQueuePriorityError=exports.DBOSQueueDuplicatedError=exports.QueueDedupIDDuplicated=exports.DBOSAwaitedWorkflowCancelledError=exports.DBOSUnexpectedStepError=exports.DBOSConflictingRegistrationError=exports.DBOSWorkflowCancelledError=exports.DBOSMaxStepRetriesError=exports.DBOSConflictingWorkflowError=exports.DBOSInvalidWorkflowTransitionError=exports.DBOSExecutorNotInitializedError=exports.DBOSMaxRecoveryAttemptsExceededError=exports.DBOSFailLoadOperationsError=exports.DBOSNonExistentWorkflowError=exports.DBOSDebuggerError=exports.DBOSConfigKeyTypeError=exports.DBOSNotAuthorizedError=exports.DBOSDataValidationError=exports.DBOSNotRegisteredError=exports.DBOSWorkflowConflictError=exports.DBOSInitializationError=exports.DBOSError=exports.isDataValidationError=void 0;function isDataValidationError(e){let dbosErrorCode=e?.dbosErrorCode;return dbosErrorCode?dbosErrorCode===DataValidationError:!1}exports.isDataValidationError=isDataValidationError;var DBOSError=class extends Error{dbosErrorCode;constructor(msg,dbosErrorCode=1){super(msg),this.dbosErrorCode=dbosErrorCode}};exports.DBOSError=DBOSError;let InitializationError=3;exports.DBOSInitializationError=class extends DBOSError{error;constructor(msg,error){super(msg,3),this.error=error}};let ConflictingWFIDError=5;exports.DBOSWorkflowConflictError=class extends DBOSError{constructor(workflowID){super(`Conflicting WF ID ${workflowID}`,5)}};let NotRegisteredError=6;exports.DBOSNotRegisteredError=class extends DBOSError{constructor(name,fullmsg){let msg=fullmsg??`Operation (Name: ${name}) not registered`;super(msg,6)}};let DataValidationError=9;exports.DBOSDataValidationError=class extends DBOSError{constructor(msg){super(msg,9)}};let NotAuthorizedError=12;exports.DBOSNotAuthorizedError=class extends DBOSError{status;constructor(msg,status=403){super(msg,12),this.status=status}};let ConfigKeyTypeError=14;exports.DBOSConfigKeyTypeError=class extends DBOSError{constructor(configKey,expectedType,actualType){super(`${configKey} should be of type ${expectedType}, but got ${actualType}`,14)}};let DebuggerError=15;exports.DBOSDebuggerError=class extends DBOSError{constructor(msg){super(`DEBUGGER: `+msg,15)}};let NonExistentWorkflowError=16;exports.DBOSNonExistentWorkflowError=class extends DBOSError{constructor(msg){super(msg,16)}};let FailLoadOperationsError=17;exports.DBOSFailLoadOperationsError=class extends DBOSError{constructor(msg){super(msg,17)}};let MaxRecoveryAttemptsExceededError=18;exports.DBOSMaxRecoveryAttemptsExceededError=class extends DBOSError{constructor(workflowID,maxRetries){super(`Workflow ${workflowID} has exceeded its maximum of ${maxRetries} execution or recovery attempts. Further attempts to execute or recover it will fail.`,18)}};let ExecutorNotInitializedError=20;exports.DBOSExecutorNotInitializedError=class extends DBOSError{constructor(){super(`DBOS not initialized`,20)}};let InvalidWorkflowTransition=21;exports.DBOSInvalidWorkflowTransitionError=class extends DBOSError{constructor(msg){super(msg??`Invalid workflow state`,21)}};let ConflictingWorkflowError=22;exports.DBOSConflictingWorkflowError=class extends DBOSError{constructor(workflowID,msg){super(`Conflicting workflow invocation with the same ID (${workflowID}): ${msg}`,22)}};let MaximumRetriesError=23;exports.DBOSMaxStepRetriesError=class extends DBOSError{errors;constructor(stepName,maxRetries,errors){let formattedErrors=errors.map((error,index)=>`Error ${index+1}: ${error.message}`).join(`. `);super(`Step ${stepName} has exceeded its maximum of ${maxRetries} retries. Previous errors: ${formattedErrors}`,23),this.errors=errors}};let WorkFlowCancelled=24;exports.DBOSWorkflowCancelledError=class extends DBOSError{workflowID;constructor(workflowID){super(`Workflow ${workflowID} has been cancelled`,24),this.workflowID=workflowID}};let ConflictingRegistrationError=25;exports.DBOSConflictingRegistrationError=class extends DBOSError{constructor(msg){super(msg,25)}};let UnexpectedStep=26;exports.DBOSUnexpectedStepError=class extends DBOSError{workflowID;stepID;expectedName;constructor(workflowID,stepID,expectedName,recordedName){super(`During execution of workflow ${workflowID} step ${stepID}, function ${recordedName} was recorded when ${expectedName} was expected. Check that your workflow is deterministic.`,26),this.workflowID=workflowID,this.stepID=stepID,this.expectedName=expectedName}};let TargetWorkFlowCancelled=27;exports.DBOSAwaitedWorkflowCancelledError=class extends DBOSError{workflowID;constructor(workflowID){super(`Awaited ${workflowID} was cancelled`,27),this.workflowID=workflowID}},exports.QueueDedupIDDuplicated=28,exports.DBOSQueueDuplicatedError=class extends DBOSError{workflowID;queue;deduplicationID;constructor(workflowID,queue,deduplicationID){super(`Workflow ${workflowID} was deduplicated due to an existing workflow in queue ${queue} with deduplication ID ${deduplicationID}.`,exports.QueueDedupIDDuplicated),this.workflowID=workflowID,this.queue=queue,this.deduplicationID=deduplicationID}};let InvalidQueuePriority=29;exports.DBOSInvalidQueuePriorityError=class extends DBOSError{priority;min;max;constructor(priority,min,max){super(`Invalid priority ${priority}. Priority must be between ${min} and ${max}.`,29),this.priority=priority,this.min=min,this.max=max}};function getDBOSErrorCode(e){if(e&&typeof e==`object`&&`dbosErrorCode`in e){let code=e.dbosErrorCode;return typeof code==`number`?code:void 0}}exports.getDBOSErrorCode=getDBOSErrorCode})),require_utils$3=__commonJSMin((exports=>{var __importDefault=exports&&exports.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,`__esModule`,{value:!0}),exports.getClientConfig=exports.interceptStreams=exports.exhaustiveCheckGuard=exports.serializeFunctionInputOutput=exports.DBOSJSON=exports.SERIALIZER_MARKER_VALUE=exports.SERIALIZER_MARKER_KEY=exports.DBOSJSONLegacy=exports.DBOSReviver=exports.DBOSReplacer=exports.cancellableSleep=exports.DEBOUNCER_WORKLOW_NAME=exports.INTERNAL_QUEUE_NAME=exports.sleepms=exports.globalParams=exports.defaultEnableOTLP=exports.readFile=exports.registerSerializationRecipe=void 0;let node_fs_1=__importDefault(__require(`node:fs`)),node_path_1=__importDefault(__require(`node:path`)),superjson_1=__importDefault(__require(`superjson`));function registerSerializationRecipe(r){superjson_1.default.registerCustom(r,r.name)}exports.registerSerializationRecipe=registerSerializationRecipe,registerSerializationRecipe({isApplicable:v=>Buffer.isBuffer(v),serialize:v=>Array.from(v),deserialize:v=>Buffer.from(v),name:`Buffer`});async function readFile(path$2,encoding=`utf8`){return await node_fs_1.default.promises.readFile(path$2,{encoding})}exports.readFile=readFile;function loadDbosVersion(){try{function findPackageRoot(start){if(typeof start==`string`&&(start.endsWith(node_path_1.default.sep)||(start+=node_path_1.default.sep),start=start.split(node_path_1.default.sep)),start.length===0)throw Error(`package.json not found in path`);start.pop();let dir=start.join(node_path_1.default.sep);return node_fs_1.default.existsSync(node_path_1.default.join(dir,`package.json`))?dir:findPackageRoot(start)}return __require(node_path_1.default.join(findPackageRoot(__dirname),`package.json`)).version}catch{return`unknown`}}function defaultEnableOTLP(){return process.env.DBOS__CLOUD===`true`}exports.defaultEnableOTLP=defaultEnableOTLP,exports.globalParams={appVersion:process.env.DBOS__APPVERSION||``,wasComputed:!1,executorID:process.env.DBOS__VMID||`local`,appID:process.env.DBOS__APPID||``,enableOTLP:defaultEnableOTLP(),dbosVersion:loadDbosVersion()},exports.sleepms=ms=>new Promise(r=>setTimeout(r,ms)),exports.INTERNAL_QUEUE_NAME=`_dbos_internal_queue`,exports.DEBOUNCER_WORKLOW_NAME=`_dbos_debouncer_workflow`;function cancellableSleep(ms){let timeoutId,resolvePromise,resolved=!1;return{promise:new Promise(resolve=>{resolvePromise=()=>{resolved||(resolved=!0,resolve(),timeoutId=void 0)},timeoutId=setTimeout(resolvePromise,ms)}),cancel:()=>{timeoutId&&(clearTimeout(timeoutId),timeoutId=void 0,resolvePromise())}}}exports.cancellableSleep=cancellableSleep;function DBOSReplacer(key,value){let actualValue=this[key];return actualValue instanceof Date?{dbos_type:`dbos_Date`,dbos_data:actualValue.toISOString()}:typeof actualValue==`bigint`?{dbos_type:`dbos_BigInt`,dbos_data:actualValue.toString()}:value}exports.DBOSReplacer=DBOSReplacer;function isSerializedBuffer(value){return typeof value==`object`&&!!value&&value.type===`Buffer`}function isSerializedDate(value){return typeof value==`object`&&!!value&&value.dbos_type===`dbos_Date`}function isSerializedBigInt(value){return typeof value==`object`&&!!value&&value.dbos_type===`dbos_BigInt`}function DBOSReviver(_key,value){switch(!0){case isSerializedBuffer(value):return Buffer.from(value.data);case isSerializedDate(value):return new Date(Date.parse(value.dbos_data));case isSerializedBigInt(value):return BigInt(value.dbos_data);default:return value}}exports.DBOSReviver=DBOSReviver,exports.DBOSJSONLegacy={parse:text=>text===null?null:JSON.parse(text,DBOSReviver),stringify:value=>JSON.stringify(value,DBOSReplacer)},exports.SERIALIZER_MARKER_KEY=`__dbos_serializer`,exports.SERIALIZER_MARKER_VALUE=`superjson`;let SERIALIZER_MARKER_STRING=`"${exports.SERIALIZER_MARKER_KEY}":"${exports.SERIALIZER_MARKER_VALUE}"`;function isDBOSBrandedSuperjsonRecord(obj){return typeof obj==`object`&&!!obj&&exports.SERIALIZER_MARKER_KEY in obj&&obj[exports.SERIALIZER_MARKER_KEY]===exports.SERIALIZER_MARKER_VALUE&&`json`in obj}function sjstringify(value){let serialized=superjson_1.default.serialize(value);return JSON.stringify({...serialized,[exports.SERIALIZER_MARKER_KEY]:exports.SERIALIZER_MARKER_VALUE})}exports.DBOSJSON={parse:text=>{if(text==null)return null;if(text.includes(SERIALIZER_MARKER_STRING)){let vanillaParsed=JSON.parse(text);if(isDBOSBrandedSuperjsonRecord(vanillaParsed))return superjson_1.default.deserialize(vanillaParsed)}return exports.DBOSJSONLegacy.parse(text)},stringify:sjstringify};function serializeFunctionInputOutput(value,path$2=[]){let stringified=exports.DBOSJSON.stringify(value),deserialized=exports.DBOSJSON.parse(stringified);return isObjectish(deserialized)&&attachFunctionStubs(value,deserialized,path$2),{deserialized,stringified}}exports.serializeFunctionInputOutput=serializeFunctionInputOutput;function attachFunctionStubs(original,deserialized,path$2=[]){let seen=new WeakSet,pairQueue=[{o:original,d:deserialized,p:path$2}];for(;pairQueue.length;){let{o,d,p:p$1}=pairQueue.pop();if(!seen.has(o)){seen.add(o);for(let key of collectFunctionKeys(o))key in d||defineThrowingStub(d,key,p$1);for(let key of getAllKeys(o))try{let childO=o[key],childD=d[key];if(!shouldRecurse(childO,childD))continue;pairQueue.push({o:childO,d:childD,p:[...p$1,key]})}catch{}if(o instanceof Map&&d instanceof Map)for(let[k,vO]of o){let vD=d.get(k);if(shouldRecurse(vO,vD)){let step=isIndexableKey(k)?String(k):`[MapValue]`;pairQueue.push({o:vO,d:vD,p:[...p$1,step]})}}if(o instanceof Set&&d instanceof Set){let arrO=Array.from(o),arrD=Array.from(d);for(let i=0;i<Math.min(arrO.length,arrD.length);i++){let vO=arrO[i],vD=arrD[i];shouldRecurse(vO,vD)&&pairQueue.push({o:vO,d:vD,p:[...p$1,i]})}}}}}function isObjectish(v){return typeof v==`object`&&!!v||typeof v==`function`}function defineThrowingStub(target,key,path$2){let stub=function(..._args){throw Error(`Attempted to call '${String(key)}' at path ${formatPath(path$2)} on an object that is a serialized function input our output value. Functions are not preserved through serialization; see 'DBOS.registerSerialization'. `)};try{Object.defineProperty(target,key,{value:stub,configurable:!0,writable:!1,enumerable:!1})}catch{target[key]=stub}}function shouldRecurse(a,b){return!(!a||!b||typeof a!=`object`||typeof b!=`object`||[Date,RegExp,WeakMap,WeakSet,ArrayBuffer,DataView].some(t=>a instanceof t))}function getAllKeys(obj){let names=Object.getOwnPropertyNames(obj),syms=Object.getOwnPropertySymbols(obj);return[...names,...syms]}function collectFunctionKeys(obj){let keys=new Set;for(let k of getAllKeys(obj)){let d=Object.getOwnPropertyDescriptor(obj,k);d&&`value`in d&&typeof d.value==`function`&&keys.add(k)}let proto=Object.getPrototypeOf(obj);for(;proto&&proto!==Object.prototype;){for(let k of Object.getOwnPropertyNames(proto)){if(k===`constructor`)continue;let d=Object.getOwnPropertyDescriptor(proto,k);d&&`value`in d&&typeof d.value==`function`&&keys.add(k)}proto=Object.getPrototypeOf(proto)}return Array.from(keys)}function formatPath(path$2){return path$2.length===0?`(root)`:path$2.map(seg=>typeof seg==`number`?`[${seg}]`:typeof seg==`symbol`?`[${String(seg)}]`:/^<?[A-Za-z_$][A-Za-z0-9_$]*>?$/.test(seg)?`.${seg}`:`[${JSON.stringify(seg)}]`).join(``).replace(/^\./,``)}function isIndexableKey(k){return typeof k==`string`||typeof k==`number`}function exhaustiveCheckGuard(_){throw Error(`Exaustive matching is not applied`)}exports.exhaustiveCheckGuard=exhaustiveCheckGuard;let originalStdoutWrite=process.stdout.write.bind(process.stdout),originalStderrWrite=process.stderr.write.bind(process.stderr);function interceptStreams(onMessage){let intercept=(stream,originalWrite)=>(chunk,encodingOrCb,cb)=>(onMessage(chunk.toString(),stream),typeof encodingOrCb==`function`?originalWrite(chunk,encodingOrCb):originalWrite(chunk,encodingOrCb,cb));process.stdout.write=intercept(`stdout`,originalStdoutWrite),process.stderr.write=intercept(`stderr`,originalStderrWrite)}exports.interceptStreams=interceptStreams;function getClientConfig(databaseUrl){let connectionString=typeof databaseUrl==`string`?databaseUrl:databaseUrl.toString(),timeout=getTimeout(typeof databaseUrl==`string`?new URL(databaseUrl):databaseUrl);return{connectionString,connectionTimeoutMillis:timeout?timeout*1e3:1e4};function getTimeout(url$1){try{let $timeout=url$1.searchParams.get(`connect_timeout`);return $timeout?Number.parseInt($timeout,10):void 0}catch{return}}}exports.getClientConfig=getClientConfig})),require_context=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.runInStepContext=exports.runWithDataSourceContext=exports.runWithParentContext=exports.runWithTopContext=exports.functionIDGetIncrement=exports.getNextWFID=exports.getCurrentContextStore=exports.isInWorkflowCtx=void 0;let async_hooks_1$1=__require(`async_hooks`),error_1=require_error(),dbos_executor_1=require_dbos_executor();function isWithinWorkflowCtx(ctx){return ctx.workflowId!==void 0}function isInStepCtx(ctx){return ctx.workflowId===void 0?!1:!!ctx.curStepFunctionId}function isInTxnCtx(ctx){return ctx.workflowId===void 0?!1:!!ctx.curTxFunctionId}function isInWorkflowCtx(ctx){return!(!isWithinWorkflowCtx(ctx)||isInStepCtx(ctx)||isInTxnCtx(ctx))}exports.isInWorkflowCtx=isInWorkflowCtx;let asyncLocalCtx=new async_hooks_1$1.AsyncLocalStorage;function getCurrentContextStore(){return asyncLocalCtx.getStore()}exports.getCurrentContextStore=getCurrentContextStore;function getNextWFID(assignedID){let wfId=assignedID;if(!wfId){let pctx=getCurrentContextStore(),nextID=pctx?.idAssignedForNextWorkflow;nextID&&(wfId=nextID,pctx.idAssignedForNextWorkflow=void 0)}return wfId}exports.getNextWFID=getNextWFID;function functionIDGetIncrement(){let pctx=getCurrentContextStore();if(!pctx)throw new error_1.DBOSInvalidWorkflowTransitionError(`Attempt to get a call ID number outside of a workflow`);if(!isInWorkflowCtx(pctx))throw new error_1.DBOSInvalidWorkflowTransitionError(`Attempt to get a call ID number in a workflow that is already in a call`);return pctx.curWFFunctionId===void 0&&(pctx.curWFFunctionId=0),pctx.curWFFunctionId++}exports.functionIDGetIncrement=functionIDGetIncrement;async function runWithTopContext(ctx,callback){return await asyncLocalCtx.run(ctx,callback)}exports.runWithTopContext=runWithTopContext;async function runWithParentContext(pctx,ctx,callback){return await asyncLocalCtx.run({...pctx,...ctx,parentCtx:pctx},callback)}exports.runWithParentContext=runWithParentContext;async function runWithDataSourceContext(callnum,callback){let pctx=getCurrentContextStore()??{};return await asyncLocalCtx.run({...pctx,curTxFunctionId:callnum,parentCtx:pctx,logger:dbos_executor_1.DBOSExecutor.globalInstance.ctxLogger},callback)}exports.runWithDataSourceContext=runWithDataSourceContext;async function runInStepContext(pctx,stepID,maxAttempts,currentAttempt,callback){if(!pctx||!isInWorkflowCtx(pctx))throw new error_1.DBOSInvalidWorkflowTransitionError;return await runWithParentContext(pctx,{stepStatus:{stepID,currentAttempt,maxAttempts:currentAttempt?maxAttempts:void 0},curStepFunctionId:stepID,parentCtx:pctx,logger:dbos_executor_1.DBOSExecutor.globalInstance.ctxLogger},callback)}exports.runInStepContext=runInStepContext})),require_AbstractAsyncHooksContextManager=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.AbstractAsyncHooksContextManager=void 0;let events_1=__require(`events`),ADD_LISTENER_METHODS=[`addListener`,`on`,`once`,`prependListener`,`prependOnceListener`];exports.AbstractAsyncHooksContextManager=class{bind(context$1,target){return target instanceof events_1.EventEmitter?this._bindEventEmitter(context$1,target):typeof target==`function`?this._bindFunction(context$1,target):target}_bindFunction(context$1,target){let manager=this,contextWrapper=function(...args){return manager.with(context$1,()=>target.apply(this,args))};return Object.defineProperty(contextWrapper,`length`,{enumerable:!1,configurable:!0,writable:!1,value:target.length}),contextWrapper}_bindEventEmitter(context$1,ee){return this._getPatchMap(ee)===void 0?(this._createPatchMap(ee),ADD_LISTENER_METHODS.forEach(methodName=>{ee[methodName]!==void 0&&(ee[methodName]=this._patchAddListener(ee,ee[methodName],context$1))}),typeof ee.removeListener==`function`&&(ee.removeListener=this._patchRemoveListener(ee,ee.removeListener)),typeof ee.off==`function`&&(ee.off=this._patchRemoveListener(ee,ee.off)),typeof ee.removeAllListeners==`function`&&(ee.removeAllListeners=this._patchRemoveAllListeners(ee,ee.removeAllListeners)),ee):ee}_patchRemoveListener(ee,original){let contextManager=this;return function(event,listener){let events=contextManager._getPatchMap(ee)?.[event];if(events===void 0)return original.call(this,event,listener);let patchedListener=events.get(listener);return original.call(this,event,patchedListener||listener)}}_patchRemoveAllListeners(ee,original){let contextManager=this;return function(event){let map=contextManager._getPatchMap(ee);return map!==void 0&&(arguments.length===0?contextManager._createPatchMap(ee):map[event]!==void 0&&delete map[event]),original.apply(this,arguments)}}_patchAddListener(ee,original,context$1){let contextManager=this;return function(event,listener){if(contextManager._wrapped)return original.call(this,event,listener);let map=contextManager._getPatchMap(ee);map===void 0&&(map=contextManager._createPatchMap(ee));let listeners=map[event];listeners===void 0&&(listeners=new WeakMap,map[event]=listeners);let patchedListener=contextManager.bind(context$1,listener);listeners.set(listener,patchedListener),contextManager._wrapped=!0;try{return original.call(this,event,patchedListener)}finally{contextManager._wrapped=!1}}}_createPatchMap(ee){let map=Object.create(null);return ee[this._kOtListeners]=map,map}_getPatchMap(ee){return ee[this._kOtListeners]}_kOtListeners=Symbol(`OtListeners`);_wrapped=!1}})),require_AsyncHooksContextManager=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.AsyncHooksContextManager=void 0;let api_1$26=__require(`@opentelemetry/api`),asyncHooks=__require(`async_hooks`),AbstractAsyncHooksContextManager_1=require_AbstractAsyncHooksContextManager();exports.AsyncHooksContextManager=class extends AbstractAsyncHooksContextManager_1.AbstractAsyncHooksContextManager{_asyncHook;_contexts=new Map;_stack=[];constructor(){super(),this._asyncHook=asyncHooks.createHook({init:this._init.bind(this),before:this._before.bind(this),after:this._after.bind(this),destroy:this._destroy.bind(this),promiseResolve:this._destroy.bind(this)})}active(){return this._stack[this._stack.length-1]??api_1$26.ROOT_CONTEXT}with(context$1,fn,thisArg,...args){this._enterContext(context$1);try{return fn.call(thisArg,...args)}finally{this._exitContext()}}enable(){return this._asyncHook.enable(),this}disable(){return this._asyncHook.disable(),this._contexts.clear(),this._stack=[],this}_init(uid,type){if(type===`TIMERWRAP`)return;let context$1=this._stack[this._stack.length-1];context$1!==void 0&&this._contexts.set(uid,context$1)}_destroy(uid){this._contexts.delete(uid)}_before(uid){let context$1=this._contexts.get(uid);context$1!==void 0&&this._enterContext(context$1)}_after(){this._exitContext()}_enterContext(context$1){this._stack.push(context$1)}_exitContext(){this._stack.pop()}}})),require_AsyncLocalStorageContextManager=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.AsyncLocalStorageContextManager=void 0;let api_1$25=__require(`@opentelemetry/api`),async_hooks_1=__require(`async_hooks`),AbstractAsyncHooksContextManager_1=require_AbstractAsyncHooksContextManager();exports.AsyncLocalStorageContextManager=class extends AbstractAsyncHooksContextManager_1.AbstractAsyncHooksContextManager{_asyncLocalStorage;constructor(){super(),this._asyncLocalStorage=new async_hooks_1.AsyncLocalStorage}active(){return this._asyncLocalStorage.getStore()??api_1$25.ROOT_CONTEXT}with(context$1,fn,thisArg,...args){let cb=thisArg==null?fn:fn.bind(thisArg);return this._asyncLocalStorage.run(context$1,cb,...args)}enable(){return this}disable(){return this._asyncLocalStorage.disable(),this}}})),require_src$9=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.AsyncLocalStorageContextManager=exports.AsyncHooksContextManager=void 0;var AsyncHooksContextManager_1=require_AsyncHooksContextManager();Object.defineProperty(exports,`AsyncHooksContextManager`,{enumerable:!0,get:function(){return AsyncHooksContextManager_1.AsyncHooksContextManager}});var AsyncLocalStorageContextManager_1=require_AsyncLocalStorageContextManager();Object.defineProperty(exports,`AsyncLocalStorageContextManager`,{enumerable:!0,get:function(){return AsyncLocalStorageContextManager_1.AsyncLocalStorageContextManager}})})),require_suppress_tracing=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.isTracingSuppressed=exports.unsuppressTracing=exports.suppressTracing=void 0;let SUPPRESS_TRACING_KEY=(0,__require(`@opentelemetry/api`).createContextKey)(`OpenTelemetry SDK Context Key SUPPRESS_TRACING`);function suppressTracing(context$1){return context$1.setValue(SUPPRESS_TRACING_KEY,!0)}exports.suppressTracing=suppressTracing;function unsuppressTracing(context$1){return context$1.deleteValue(SUPPRESS_TRACING_KEY)}exports.unsuppressTracing=unsuppressTracing;function isTracingSuppressed(context$1){return context$1.getValue(SUPPRESS_TRACING_KEY)===!0}exports.isTracingSuppressed=isTracingSuppressed})),require_constants$1=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BAGGAGE_MAX_TOTAL_LENGTH=exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS=exports.BAGGAGE_MAX_NAME_VALUE_PAIRS=exports.BAGGAGE_HEADER=exports.BAGGAGE_ITEMS_SEPARATOR=exports.BAGGAGE_PROPERTIES_SEPARATOR=exports.BAGGAGE_KEY_PAIR_SEPARATOR=void 0,exports.BAGGAGE_KEY_PAIR_SEPARATOR=`=`,exports.BAGGAGE_PROPERTIES_SEPARATOR=`;`,exports.BAGGAGE_ITEMS_SEPARATOR=`,`,exports.BAGGAGE_HEADER=`baggage`,exports.BAGGAGE_MAX_NAME_VALUE_PAIRS=180,exports.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS=4096,exports.BAGGAGE_MAX_TOTAL_LENGTH=8192})),require_utils$2=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.parseKeyPairsIntoRecord=exports.parsePairKeyValue=exports.getKeyPairs=exports.serializeKeyPairs=void 0;let api_1$24=__require(`@opentelemetry/api`),constants_1=require_constants$1();function serializeKeyPairs(keyPairs){return keyPairs.reduce((hValue,current)=>{let value=`${hValue}${hValue===``?``:constants_1.BAGGAGE_ITEMS_SEPARATOR}${current}`;return value.length>constants_1.BAGGAGE_MAX_TOTAL_LENGTH?hValue:value},``)}exports.serializeKeyPairs=serializeKeyPairs;function getKeyPairs(baggage){return baggage.getAllEntries().map(([key,value])=>{let entry=`${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`;return value.metadata!==void 0&&(entry+=constants_1.BAGGAGE_PROPERTIES_SEPARATOR+value.metadata.toString()),entry})}exports.getKeyPairs=getKeyPairs;function parsePairKeyValue(entry){let valueProps=entry.split(constants_1.BAGGAGE_PROPERTIES_SEPARATOR);if(valueProps.length<=0)return;let keyPairPart=valueProps.shift();if(!keyPairPart)return;let separatorIndex=keyPairPart.indexOf(constants_1.BAGGAGE_KEY_PAIR_SEPARATOR);if(separatorIndex<=0)return;let key=decodeURIComponent(keyPairPart.substring(0,separatorIndex).trim()),value=decodeURIComponent(keyPairPart.substring(separatorIndex+1).trim()),metadata;return valueProps.length>0&&(metadata=(0,api_1$24.baggageEntryMetadataFromString)(valueProps.join(constants_1.BAGGAGE_PROPERTIES_SEPARATOR))),{key,value,metadata}}exports.parsePairKeyValue=parsePairKeyValue;function parseKeyPairsIntoRecord(value){let result={};return typeof value==`string`&&value.length>0&&value.split(constants_1.BAGGAGE_ITEMS_SEPARATOR).forEach(entry=>{let keyPair=parsePairKeyValue(entry);keyPair!==void 0&&keyPair.value.length>0&&(result[keyPair.key]=keyPair.value)}),result}exports.parseKeyPairsIntoRecord=parseKeyPairsIntoRecord})),require_W3CBaggagePropagator=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.W3CBaggagePropagator=void 0;let api_1$23=__require(`@opentelemetry/api`),suppress_tracing_1=require_suppress_tracing(),constants_1=require_constants$1(),utils_1=require_utils$2();exports.W3CBaggagePropagator=class{inject(context$1,carrier,setter){let baggage=api_1$23.propagation.getBaggage(context$1);if(!baggage||(0,suppress_tracing_1.isTracingSuppressed)(context$1))return;let keyPairs=(0,utils_1.getKeyPairs)(baggage).filter(pair=>pair.length<=constants_1.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS).slice(0,constants_1.BAGGAGE_MAX_NAME_VALUE_PAIRS),headerValue=(0,utils_1.serializeKeyPairs)(keyPairs);headerValue.length>0&&setter.set(carrier,constants_1.BAGGAGE_HEADER,headerValue)}extract(context$1,carrier,getter){let headerValue=getter.get(carrier,constants_1.BAGGAGE_HEADER),baggageString=Array.isArray(headerValue)?headerValue.join(constants_1.BAGGAGE_ITEMS_SEPARATOR):headerValue;if(!baggageString)return context$1;let baggage={};return baggageString.length===0||(baggageString.split(constants_1.BAGGAGE_ITEMS_SEPARATOR).forEach(entry=>{let keyPair=(0,utils_1.parsePairKeyValue)(entry);if(keyPair){let baggageEntry={value:keyPair.value};keyPair.metadata&&(baggageEntry.metadata=keyPair.metadata),baggage[keyPair.key]=baggageEntry}}),Object.entries(baggage).length===0)?context$1:api_1$23.propagation.setBaggage(context$1,api_1$23.propagation.createBaggage(baggage))}fields(){return[constants_1.BAGGAGE_HEADER]}}})),require_anchored_clock=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.AnchoredClock=void 0,exports.AnchoredClock=class{_monotonicClock;_epochMillis;_performanceMillis;constructor(systemClock,monotonicClock){this._monotonicClock=monotonicClock,this._epochMillis=systemClock.now(),this._performanceMillis=monotonicClock.now()}now(){let delta=this._monotonicClock.now()-this._performanceMillis;return this._epochMillis+delta}}})),require_attributes=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.isAttributeValue=exports.isAttributeKey=exports.sanitizeAttributes=void 0;let api_1$22=__require(`@opentelemetry/api`);function sanitizeAttributes(attributes){let out={};if(typeof attributes!=`object`||!attributes)return out;for(let key in attributes){if(!Object.prototype.hasOwnProperty.call(attributes,key))continue;if(!isAttributeKey(key)){api_1$22.diag.warn(`Invalid attribute key: ${key}`);continue}let val=attributes[key];if(!isAttributeValue(val)){api_1$22.diag.warn(`Invalid attribute value set for key: ${key}`);continue}Array.isArray(val)?out[key]=val.slice():out[key]=val}return out}exports.sanitizeAttributes=sanitizeAttributes;function isAttributeKey(key){return typeof key==`string`&&key!==``}exports.isAttributeKey=isAttributeKey;function isAttributeValue(val){return val==null?!0:Array.isArray(val)?isHomogeneousAttributeValueArray(val):isValidPrimitiveAttributeValueType(typeof val)}exports.isAttributeValue=isAttributeValue;function isHomogeneousAttributeValueArray(arr){let type;for(let element of arr){if(element==null)continue;let elementType=typeof element;if(elementType!==type){if(!type){if(isValidPrimitiveAttributeValueType(elementType)){type=elementType;continue}return!1}return!1}}return!0}function isValidPrimitiveAttributeValueType(valType){switch(valType){case`number`:case`boolean`:case`string`:return!0}return!1}})),require_logging_error_handler=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.loggingErrorHandler=void 0;let api_1$21=__require(`@opentelemetry/api`);function loggingErrorHandler(){return ex=>{api_1$21.diag.error(stringifyException(ex))}}exports.loggingErrorHandler=loggingErrorHandler;function stringifyException(ex){return typeof ex==`string`?ex:JSON.stringify(flattenException(ex))}function flattenException(ex){let result={},current=ex;for(;current!==null;)Object.getOwnPropertyNames(current).forEach(propertyName=>{if(result[propertyName])return;let value=current[propertyName];value&&(result[propertyName]=String(value))}),current=Object.getPrototypeOf(current);return result}})),require_global_error_handler=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.globalErrorHandler=exports.setGlobalErrorHandler=void 0;let delegateHandler=(0,require_logging_error_handler().loggingErrorHandler)();function setGlobalErrorHandler(handler){delegateHandler=handler}exports.setGlobalErrorHandler=setGlobalErrorHandler;function globalErrorHandler(ex){try{delegateHandler(ex)}catch{}}exports.globalErrorHandler=globalErrorHandler})),require_environment=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.getStringListFromEnv=exports.getBooleanFromEnv=exports.getStringFromEnv=exports.getNumberFromEnv=void 0;let api_1$20=__require(`@opentelemetry/api`),util_1=__require(`util`);function getNumberFromEnv(key){let raw=process.env[key];if(raw==null||raw.trim()===``)return;let value=Number(raw);if(isNaN(value)){api_1$20.diag.warn(`Unknown value ${(0,util_1.inspect)(raw)} for ${key}, expected a number, using defaults`);return}return value}exports.getNumberFromEnv=getNumberFromEnv;function getStringFromEnv(key){let raw=process.env[key];if(!(raw==null||raw.trim()===``))return raw}exports.getStringFromEnv=getStringFromEnv;function getBooleanFromEnv(key){let raw=process.env[key]?.trim().toLowerCase();return raw==null||raw===``?!1:raw===`true`?!0:(raw===`false`||api_1$20.diag.warn(`Unknown value ${(0,util_1.inspect)(raw)} for ${key}, expected 'true' or 'false', falling back to 'false' (default)`),!1)}exports.getBooleanFromEnv=getBooleanFromEnv;function getStringListFromEnv(key){return getStringFromEnv(key)?.split(`,`).map(v=>v.trim()).filter(s=>s!==``)}exports.getStringListFromEnv=getStringListFromEnv})),require_globalThis$1=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports._globalThis=void 0,exports._globalThis=typeof globalThis==`object`?globalThis:global})),require_performance=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.otperformance=void 0,exports.otperformance=__require(`perf_hooks`).performance})),require_version=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.VERSION=void 0,exports.VERSION=`2.2.0`})),require_semconv=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ATTR_PROCESS_RUNTIME_NAME=void 0,exports.ATTR_PROCESS_RUNTIME_NAME=`process.runtime.name`})),require_sdk_info=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SDK_INFO=void 0;let version_1=require_version(),semantic_conventions_1$1=__require(`@opentelemetry/semantic-conventions`),semconv_1=require_semconv();exports.SDK_INFO={[semantic_conventions_1$1.ATTR_TELEMETRY_SDK_NAME]:`opentelemetry`,[semconv_1.ATTR_PROCESS_RUNTIME_NAME]:`node`,[semantic_conventions_1$1.ATTR_TELEMETRY_SDK_LANGUAGE]:semantic_conventions_1$1.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS,[semantic_conventions_1$1.ATTR_TELEMETRY_SDK_VERSION]:version_1.VERSION}})),require_node$5=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SDK_INFO=exports.otperformance=exports._globalThis=exports.getStringListFromEnv=exports.getNumberFromEnv=exports.getBooleanFromEnv=exports.getStringFromEnv=void 0;var environment_1=require_environment();Object.defineProperty(exports,`getStringFromEnv`,{enumerable:!0,get:function(){return environment_1.getStringFromEnv}}),Object.defineProperty(exports,`getBooleanFromEnv`,{enumerable:!0,get:function(){return environment_1.getBooleanFromEnv}}),Object.defineProperty(exports,`getNumberFromEnv`,{enumerable:!0,get:function(){return environment_1.getNumberFromEnv}}),Object.defineProperty(exports,`getStringListFromEnv`,{enumerable:!0,get:function(){return environment_1.getStringListFromEnv}});var globalThis_1=require_globalThis$1();Object.defineProperty(exports,`_globalThis`,{enumerable:!0,get:function(){return globalThis_1._globalThis}});var performance_1=require_performance();Object.defineProperty(exports,`otperformance`,{enumerable:!0,get:function(){return performance_1.otperformance}});var sdk_info_1=require_sdk_info();Object.defineProperty(exports,`SDK_INFO`,{enumerable:!0,get:function(){return sdk_info_1.SDK_INFO}})})),require_platform$5=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.getStringListFromEnv=exports.getNumberFromEnv=exports.getStringFromEnv=exports.getBooleanFromEnv=exports.otperformance=exports._globalThis=exports.SDK_INFO=void 0;var node_1=require_node$5();Object.defineProperty(exports,`SDK_INFO`,{enumerable:!0,get:function(){return node_1.SDK_INFO}}),Object.defineProperty(exports,`_globalThis`,{enumerable:!0,get:function(){return node_1._globalThis}}),Object.defineProperty(exports,`otperformance`,{enumerable:!0,get:function(){return node_1.otperformance}}),Object.defineProperty(exports,`getBooleanFromEnv`,{enumerable:!0,get:function(){return node_1.getBooleanFromEnv}}),Object.defineProperty(exports,`getStringFromEnv`,{enumerable:!0,get:function(){return node_1.getStringFromEnv}}),Object.defineProperty(exports,`getNumberFromEnv`,{enumerable:!0,get:function(){return node_1.getNumberFromEnv}}),Object.defineProperty(exports,`getStringListFromEnv`,{enumerable:!0,get:function(){return node_1.getStringListFromEnv}})})),require_time=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.addHrTimes=exports.isTimeInput=exports.isTimeInputHrTime=exports.hrTimeToMicroseconds=exports.hrTimeToMilliseconds=exports.hrTimeToNanoseconds=exports.hrTimeToTimeStamp=exports.hrTimeDuration=exports.timeInputToHrTime=exports.hrTime=exports.getTimeOrigin=exports.millisToHrTime=void 0;let platform_1=require_platform$5(),NANOSECOND_DIGITS=9,MILLISECONDS_TO_NANOSECONDS=10**6,SECOND_TO_NANOSECONDS=10**9;function millisToHrTime(epochMillis){let epochSeconds=epochMillis/1e3;return[Math.trunc(epochSeconds),Math.round(epochMillis%1e3*MILLISECONDS_TO_NANOSECONDS)]}exports.millisToHrTime=millisToHrTime;function getTimeOrigin(){let timeOrigin=platform_1.otperformance.timeOrigin;if(typeof timeOrigin!=`number`){let perf=platform_1.otperformance;timeOrigin=perf.timing&&perf.timing.fetchStart}return timeOrigin}exports.getTimeOrigin=getTimeOrigin;function hrTime(performanceNow){return addHrTimes(millisToHrTime(getTimeOrigin()),millisToHrTime(typeof performanceNow==`number`?performanceNow:platform_1.otperformance.now()))}exports.hrTime=hrTime;function timeInputToHrTime(time){if(isTimeInputHrTime(time))return time;if(typeof time==`number`)return time<getTimeOrigin()?hrTime(time):millisToHrTime(time);if(time instanceof Date)return millisToHrTime(time.getTime());throw TypeError(`Invalid input type`)}exports.timeInputToHrTime=timeInputToHrTime;function hrTimeDuration(startTime,endTime){let seconds=endTime[0]-startTime[0],nanos=endTime[1]-startTime[1];return nanos<0&&(--seconds,nanos+=SECOND_TO_NANOSECONDS),[seconds,nanos]}exports.hrTimeDuration=hrTimeDuration;function hrTimeToTimeStamp(time){let precision=9,tmp=`${`0`.repeat(9)}${time[1]}Z`,nanoString=tmp.substring(tmp.length-9-1);return new Date(time[0]*1e3).toISOString().replace(`000Z`,nanoString)}exports.hrTimeToTimeStamp=hrTimeToTimeStamp;function hrTimeToNanoseconds(time){return time[0]*SECOND_TO_NANOSECONDS+time[1]}exports.hrTimeToNanoseconds=hrTimeToNanoseconds;function hrTimeToMilliseconds(time){return time[0]*1e3+time[1]/1e6}exports.hrTimeToMilliseconds=hrTimeToMilliseconds;function hrTimeToMicroseconds(time){return time[0]*1e6+time[1]/1e3}exports.hrTimeToMicroseconds=hrTimeToMicroseconds;function isTimeInputHrTime(value){return Array.isArray(value)&&value.length===2&&typeof value[0]==`number`&&typeof value[1]==`number`}exports.isTimeInputHrTime=isTimeInputHrTime;function isTimeInput(value){return isTimeInputHrTime(value)||typeof value==`number`||value instanceof Date}exports.isTimeInput=isTimeInput;function addHrTimes(time1,time2){let out=[time1[0]+time2[0],time1[1]+time2[1]];return out[1]>=SECOND_TO_NANOSECONDS&&(out[1]-=SECOND_TO_NANOSECONDS,out[0]+=1),out}exports.addHrTimes=addHrTimes})),require_timer_util=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.unrefTimer=void 0;function unrefTimer(timer){typeof timer!=`number`&&timer.unref()}exports.unrefTimer=unrefTimer})),require_ExportResult=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ExportResultCode=void 0,(function(ExportResultCode$1){ExportResultCode$1[ExportResultCode$1.SUCCESS=0]=`SUCCESS`,ExportResultCode$1[ExportResultCode$1.FAILED=1]=`FAILED`})(exports.ExportResultCode||={})})),require_composite=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.CompositePropagator=void 0;let api_1$19=__require(`@opentelemetry/api`);exports.CompositePropagator=class{_propagators;_fields;constructor(config={}){this._propagators=config.propagators??[],this._fields=Array.from(new Set(this._propagators.map(p$1=>typeof p$1.fields==`function`?p$1.fields():[]).reduce((x,y)=>x.concat(y),[])))}inject(context$1,carrier,setter){for(let propagator of this._propagators)try{propagator.inject(context$1,carrier,setter)}catch(err){api_1$19.diag.warn(`Failed to inject with ${propagator.constructor.name}. Err: ${err.message}`)}}extract(context$1,carrier,getter){return this._propagators.reduce((ctx,propagator)=>{try{return propagator.extract(ctx,carrier,getter)}catch(err){api_1$19.diag.warn(`Failed to extract with ${propagator.constructor.name}. Err: ${err.message}`)}return ctx},context$1)}fields(){return this._fields.slice()}}})),require_validators=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.validateValue=exports.validateKey=void 0;let VALID_KEY_CHAR_RANGE=`[_0-9a-z-*/]`,VALID_KEY=`[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`,VALID_VENDOR_KEY=`[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`,VALID_KEY_REGEX=RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`),VALID_VALUE_BASE_REGEX=/^[ -~]{0,255}[!-~]$/,INVALID_VALUE_COMMA_EQUAL_REGEX=/,|=/;function validateKey(key){return VALID_KEY_REGEX.test(key)}exports.validateKey=validateKey;function validateValue(value){return VALID_VALUE_BASE_REGEX.test(value)&&!INVALID_VALUE_COMMA_EQUAL_REGEX.test(value)}exports.validateValue=validateValue})),require_TraceState=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.TraceState=void 0;let validators_1=require_validators(),MAX_TRACE_STATE_ITEMS=32,MAX_TRACE_STATE_LEN=512,LIST_MEMBERS_SEPARATOR=`,`,LIST_MEMBER_KEY_VALUE_SPLITTER=`=`;exports.TraceState=class TraceState{_internalState=new Map;constructor(rawTraceState){rawTraceState&&this._parse(rawTraceState)}set(key,value){let traceState=this._clone();return traceState._internalState.has(key)&&traceState._internalState.delete(key),traceState._internalState.set(key,value),traceState}unset(key){let traceState=this._clone();return traceState._internalState.delete(key),traceState}get(key){return this._internalState.get(key)}serialize(){return this._keys().reduce((agg,key)=>(agg.push(key+`=`+this.get(key)),agg),[]).join(`,`)}_parse(rawTraceState){rawTraceState.length>512||(this._internalState=rawTraceState.split(`,`).reverse().reduce((agg,part)=>{let listMember=part.trim(),i=listMember.indexOf(`=`);if(i!==-1){let key=listMember.slice(0,i),value=listMember.slice(i+1,part.length);(0,validators_1.validateKey)(key)&&(0,validators_1.validateValue)(value)&&agg.set(key,value)}return agg},new Map),this._internalState.size>32&&(this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,32))))}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){let traceState=new TraceState;return traceState._internalState=new Map(this._internalState),traceState}}})),require_W3CTraceContextPropagator=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.W3CTraceContextPropagator=exports.parseTraceParent=exports.TRACE_STATE_HEADER=exports.TRACE_PARENT_HEADER=void 0;let api_1$18=__require(`@opentelemetry/api`),suppress_tracing_1=require_suppress_tracing(),TraceState_1=require_TraceState();exports.TRACE_PARENT_HEADER=`traceparent`,exports.TRACE_STATE_HEADER=`tracestate`;let VERSION=`00`,TRACE_PARENT_REGEX=RegExp(`^\\s?((?!ff)[\\da-f]{2})-((?![0]{32})[\\da-f]{32})-((?![0]{16})[\\da-f]{16})-([\\da-f]{2})(-.*)?\\s?$`);function parseTraceParent(traceParent){let match=TRACE_PARENT_REGEX.exec(traceParent);return!match||match[1]===`00`&&match[5]?null:{traceId:match[2],spanId:match[3],traceFlags:parseInt(match[4],16)}}exports.parseTraceParent=parseTraceParent,exports.W3CTraceContextPropagator=class{inject(context$1,carrier,setter){let spanContext=api_1$18.trace.getSpanContext(context$1);if(!spanContext||(0,suppress_tracing_1.isTracingSuppressed)(context$1)||!(0,api_1$18.isSpanContextValid)(spanContext))return;let traceParent=`00-${spanContext.traceId}-${spanContext.spanId}-0${Number(spanContext.traceFlags||api_1$18.TraceFlags.NONE).toString(16)}`;setter.set(carrier,exports.TRACE_PARENT_HEADER,traceParent),spanContext.traceState&&setter.set(carrier,exports.TRACE_STATE_HEADER,spanContext.traceState.serialize())}extract(context$1,carrier,getter){let traceParentHeader=getter.get(carrier,exports.TRACE_PARENT_HEADER);if(!traceParentHeader)return context$1;let traceParent=Array.isArray(traceParentHeader)?traceParentHeader[0]:traceParentHeader;if(typeof traceParent!=`string`)return context$1;let spanContext=parseTraceParent(traceParent);if(!spanContext)return context$1;spanContext.isRemote=!0;let traceStateHeader=getter.get(carrier,exports.TRACE_STATE_HEADER);if(traceStateHeader){let state=Array.isArray(traceStateHeader)?traceStateHeader.join(`,`):traceStateHeader;spanContext.traceState=new TraceState_1.TraceState(typeof state==`string`?state:void 0)}return api_1$18.trace.setSpanContext(context$1,spanContext)}fields(){return[exports.TRACE_PARENT_HEADER,exports.TRACE_STATE_HEADER]}}})),require_rpc_metadata=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.getRPCMetadata=exports.deleteRPCMetadata=exports.setRPCMetadata=exports.RPCType=void 0;let RPC_METADATA_KEY=(0,__require(`@opentelemetry/api`).createContextKey)(`OpenTelemetry SDK Context Key RPC_METADATA`);(function(RPCType){RPCType.HTTP=`http`})(exports.RPCType||={});function setRPCMetadata(context$1,meta){return context$1.setValue(RPC_METADATA_KEY,meta)}exports.setRPCMetadata=setRPCMetadata;function deleteRPCMetadata(context$1){return context$1.deleteValue(RPC_METADATA_KEY)}exports.deleteRPCMetadata=deleteRPCMetadata;function getRPCMetadata(context$1){return context$1.getValue(RPC_METADATA_KEY)}exports.getRPCMetadata=getRPCMetadata})),require_lodash_merge=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.isPlainObject=void 0;let objectTag=`[object Object]`,nullTag=`[object Null]`,undefinedTag=`[object Undefined]`,funcToString=Function.prototype.toString,objectCtorString=funcToString.call(Object),getPrototypeOf=Object.getPrototypeOf,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,symToStringTag=Symbol?Symbol.toStringTag:void 0,nativeObjectToString=objectProto.toString;function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!==`[object Object]`)return!1;let proto=getPrototypeOf(value);if(proto===null)return!0;let Ctor=hasOwnProperty.call(proto,`constructor`)&&proto.constructor;return typeof Ctor==`function`&&Ctor instanceof Ctor&&funcToString.call(Ctor)===objectCtorString}exports.isPlainObject=isPlainObject;function isObjectLike(value){return typeof value==`object`&&!!value}function baseGetTag(value){return value==null?value===void 0?`[object Undefined]`:`[object Null]`:symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value)}function getRawTag(value){let isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag],unmasked=!1;try{value[symToStringTag]=void 0,unmasked=!0}catch{}let result=nativeObjectToString.call(value);return unmasked&&(isOwn?value[symToStringTag]=tag:delete value[symToStringTag]),result}function objectToString(value){return nativeObjectToString.call(value)}})),require_merge=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.merge=void 0;let lodash_merge_1=require_lodash_merge(),MAX_LEVEL=20;function merge(...args){let result=args.shift(),objects=new WeakMap;for(;args.length>0;)result=mergeTwoObjects(result,args.shift(),0,objects);return result}exports.merge=merge;function takeValue(value){return isArray(value)?value.slice():value}function mergeTwoObjects(one,two,level=0,objects){let result;if(!(level>20)){if(level++,isPrimitive(one)||isPrimitive(two)||isFunction(two))result=takeValue(two);else if(isArray(one)){if(result=one.slice(),isArray(two))for(let i=0,j=two.length;i<j;i++)result.push(takeValue(two[i]));else if(isObject(two)){let keys=Object.keys(two);for(let i=0,j=keys.length;i<j;i++){let key=keys[i];result[key]=takeValue(two[key])}}}else if(isObject(one))if(isObject(two)){if(!shouldMerge(one,two))return two;result=Object.assign({},one);let keys=Object.keys(two);for(let i=0,j=keys.length;i<j;i++){let key=keys[i],twoValue=two[key];if(isPrimitive(twoValue))twoValue===void 0?delete result[key]:result[key]=twoValue;else{let obj1=result[key],obj2=twoValue;if(wasObjectReferenced(one,key,objects)||wasObjectReferenced(two,key,objects))delete result[key];else{if(isObject(obj1)&&isObject(obj2)){let arr1=objects.get(obj1)||[],arr2=objects.get(obj2)||[];arr1.push({obj:one,key}),arr2.push({obj:two,key}),objects.set(obj1,arr1),objects.set(obj2,arr2)}result[key]=mergeTwoObjects(result[key],twoValue,level,objects)}}}}else result=two;return result}}function wasObjectReferenced(obj,key,objects){let arr=objects.get(obj[key])||[];for(let i=0,j=arr.length;i<j;i++){let info=arr[i];if(info.key===key&&info.obj===obj)return!0}return!1}function isArray(value){return Array.isArray(value)}function isFunction(value){return typeof value==`function`}function isObject(value){return!isPrimitive(value)&&!isArray(value)&&!isFunction(value)&&typeof value==`object`}function isPrimitive(value){return typeof value==`string`||typeof value==`number`||typeof value==`boolean`||value===void 0||value instanceof Date||value instanceof RegExp||value===null}function shouldMerge(one,two){return!(!(0,lodash_merge_1.isPlainObject)(one)||!(0,lodash_merge_1.isPlainObject)(two))}})),require_timeout=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.callWithTimeout=exports.TimeoutError=void 0;var TimeoutError=class TimeoutError extends Error{constructor(message){super(message),Object.setPrototypeOf(this,TimeoutError.prototype)}};exports.TimeoutError=TimeoutError;function callWithTimeout(promise,timeout){let timeoutHandle,timeoutPromise=new Promise(function(_resolve,reject){timeoutHandle=setTimeout(function(){reject(new TimeoutError(`Operation timed out.`))},timeout)});return Promise.race([promise,timeoutPromise]).then(result=>(clearTimeout(timeoutHandle),result),reason=>{throw clearTimeout(timeoutHandle),reason})}exports.callWithTimeout=callWithTimeout})),require_url=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.isUrlIgnored=exports.urlMatches=void 0;function urlMatches(url$1,urlToMatch){return typeof urlToMatch==`string`?url$1===urlToMatch:!!url$1.match(urlToMatch)}exports.urlMatches=urlMatches;function isUrlIgnored(url$1,ignoredUrls){if(!ignoredUrls)return!1;for(let ignoreUrl of ignoredUrls)if(urlMatches(url$1,ignoreUrl))return!0;return!1}exports.isUrlIgnored=isUrlIgnored})),require_promise=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.Deferred=void 0,exports.Deferred=class{_promise;_resolve;_reject;constructor(){this._promise=new Promise((resolve,reject)=>{this._resolve=resolve,this._reject=reject})}get promise(){return this._promise}resolve(val){this._resolve(val)}reject(err){this._reject(err)}}})),require_callback=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BindOnceFuture=void 0;let promise_1=require_promise();exports.BindOnceFuture=class{_callback;_that;_isCalled=!1;_deferred=new promise_1.Deferred;constructor(_callback,_that){this._callback=_callback,this._that=_that}get isCalled(){return this._isCalled}get promise(){return this._deferred.promise}call(...args){if(!this._isCalled){this._isCalled=!0;try{Promise.resolve(this._callback.call(this._that,...args)).then(val=>this._deferred.resolve(val),err=>this._deferred.reject(err))}catch(err){this._deferred.reject(err)}}return this._deferred.promise}}})),require_configuration=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.diagLogLevelFromString=void 0;let api_1$17=__require(`@opentelemetry/api`),logLevelMap={ALL:api_1$17.DiagLogLevel.ALL,VERBOSE:api_1$17.DiagLogLevel.VERBOSE,DEBUG:api_1$17.DiagLogLevel.DEBUG,INFO:api_1$17.DiagLogLevel.INFO,WARN:api_1$17.DiagLogLevel.WARN,ERROR:api_1$17.DiagLogLevel.ERROR,NONE:api_1$17.DiagLogLevel.NONE};function diagLogLevelFromString(value){return value==null?void 0:logLevelMap[value.toUpperCase()]??(api_1$17.diag.warn(`Unknown log level "${value}", expected one of ${Object.keys(logLevelMap)}, using default`),api_1$17.DiagLogLevel.INFO)}exports.diagLogLevelFromString=diagLogLevelFromString})),require_exporter=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports._export=void 0;let api_1$16=__require(`@opentelemetry/api`),suppress_tracing_1=require_suppress_tracing();function _export(exporter,arg){return new Promise(resolve=>{api_1$16.context.with((0,suppress_tracing_1.suppressTracing)(api_1$16.context.active()),()=>{exporter.export(arg,result=>{resolve(result)})})})}exports._export=_export})),require_src$8=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.internal=exports.diagLogLevelFromString=exports.BindOnceFuture=exports.urlMatches=exports.isUrlIgnored=exports.callWithTimeout=exports.TimeoutError=exports.merge=exports.TraceState=exports.unsuppressTracing=exports.suppressTracing=exports.isTracingSuppressed=exports.setRPCMetadata=exports.getRPCMetadata=exports.deleteRPCMetadata=exports.RPCType=exports.parseTraceParent=exports.W3CTraceContextPropagator=exports.TRACE_STATE_HEADER=exports.TRACE_PARENT_HEADER=exports.CompositePropagator=exports.otperformance=exports.getStringListFromEnv=exports.getNumberFromEnv=exports.getBooleanFromEnv=exports.getStringFromEnv=exports._globalThis=exports.SDK_INFO=exports.parseKeyPairsIntoRecord=exports.ExportResultCode=exports.unrefTimer=exports.timeInputToHrTime=exports.millisToHrTime=exports.isTimeInputHrTime=exports.isTimeInput=exports.hrTimeToTimeStamp=exports.hrTimeToNanoseconds=exports.hrTimeToMilliseconds=exports.hrTimeToMicroseconds=exports.hrTimeDuration=exports.hrTime=exports.getTimeOrigin=exports.addHrTimes=exports.loggingErrorHandler=exports.setGlobalErrorHandler=exports.globalErrorHandler=exports.sanitizeAttributes=exports.isAttributeValue=exports.AnchoredClock=exports.W3CBaggagePropagator=void 0;var W3CBaggagePropagator_1=require_W3CBaggagePropagator();Object.defineProperty(exports,`W3CBaggagePropagator`,{enumerable:!0,get:function(){return W3CBaggagePropagator_1.W3CBaggagePropagator}});var anchored_clock_1=require_anchored_clock();Object.defineProperty(exports,`AnchoredClock`,{enumerable:!0,get:function(){return anchored_clock_1.AnchoredClock}});var attributes_1=require_attributes();Object.defineProperty(exports,`isAttributeValue`,{enumerable:!0,get:function(){return attributes_1.isAttributeValue}}),Object.defineProperty(exports,`sanitizeAttributes`,{enumerable:!0,get:function(){return attributes_1.sanitizeAttributes}});var global_error_handler_1=require_global_error_handler();Object.defineProperty(exports,`globalErrorHandler`,{enumerable:!0,get:function(){return global_error_handler_1.globalErrorHandler}}),Object.defineProperty(exports,`setGlobalErrorHandler`,{enumerable:!0,get:function(){return global_error_handler_1.setGlobalErrorHandler}});var logging_error_handler_1=require_logging_error_handler();Object.defineProperty(exports,`loggingErrorHandler`,{enumerable:!0,get:function(){return logging_error_handler_1.loggingErrorHandler}});var time_1=require_time();Object.defineProperty(exports,`addHrTimes`,{enumerable:!0,get:function(){return time_1.addHrTimes}}),Object.defineProperty(exports,`getTimeOrigin`,{enumerable:!0,get:function(){return time_1.getTimeOrigin}}),Object.defineProperty(exports,`hrTime`,{enumerable:!0,get:function(){return time_1.hrTime}}),Object.defineProperty(exports,`hrTimeDuration`,{enumerable:!0,get:function(){return time_1.hrTimeDuration}}),Object.defineProperty(exports,`hrTimeToMicroseconds`,{enumerable:!0,get:function(){return time_1.hrTimeToMicroseconds}}),Object.defineProperty(exports,`hrTimeToMilliseconds`,{enumerable:!0,get:function(){return time_1.hrTimeToMilliseconds}}),Object.defineProperty(exports,`hrTimeToNanoseconds`,{enumerable:!0,get:function(){return time_1.hrTimeToNanoseconds}}),Object.defineProperty(exports,`hrTimeToTimeStamp`,{enumerable:!0,get:function(){return time_1.hrTimeToTimeStamp}}),Object.defineProperty(exports,`isTimeInput`,{enumerable:!0,get:function(){return time_1.isTimeInput}}),Object.defineProperty(exports,`isTimeInputHrTime`,{enumerable:!0,get:function(){return time_1.isTimeInputHrTime}}),Object.defineProperty(exports,`millisToHrTime`,{enumerable:!0,get:function(){return time_1.millisToHrTime}}),Object.defineProperty(exports,`timeInputToHrTime`,{enumerable:!0,get:function(){return time_1.timeInputToHrTime}});var timer_util_1=require_timer_util();Object.defineProperty(exports,`unrefTimer`,{enumerable:!0,get:function(){return timer_util_1.unrefTimer}});var ExportResult_1=require_ExportResult();Object.defineProperty(exports,`ExportResultCode`,{enumerable:!0,get:function(){return ExportResult_1.ExportResultCode}});var utils_1=require_utils$2();Object.defineProperty(exports,`parseKeyPairsIntoRecord`,{enumerable:!0,get:function(){return utils_1.parseKeyPairsIntoRecord}});var platform_1=require_platform$5();Object.defineProperty(exports,`SDK_INFO`,{enumerable:!0,get:function(){return platform_1.SDK_INFO}}),Object.defineProperty(exports,`_globalThis`,{enumerable:!0,get:function(){return platform_1._globalThis}}),Object.defineProperty(exports,`getStringFromEnv`,{enumerable:!0,get:function(){return platform_1.getStringFromEnv}}),Object.defineProperty(exports,`getBooleanFromEnv`,{enumerable:!0,get:function(){return platform_1.getBooleanFromEnv}}),Object.defineProperty(exports,`getNumberFromEnv`,{enumerable:!0,get:function(){return platform_1.getNumberFromEnv}}),Object.defineProperty(exports,`getStringListFromEnv`,{enumerable:!0,get:function(){return platform_1.getStringListFromEnv}}),Object.defineProperty(exports,`otperformance`,{enumerable:!0,get:function(){return platform_1.otperformance}});var composite_1=require_composite();Object.defineProperty(exports,`CompositePropagator`,{enumerable:!0,get:function(){return composite_1.CompositePropagator}});var W3CTraceContextPropagator_1=require_W3CTraceContextPropagator();Object.defineProperty(exports,`TRACE_PARENT_HEADER`,{enumerable:!0,get:function(){return W3CTraceContextPropagator_1.TRACE_PARENT_HEADER}}),Object.defineProperty(exports,`TRACE_STATE_HEADER`,{enumerable:!0,get:function(){return W3CTraceContextPropagator_1.TRACE_STATE_HEADER}}),Object.defineProperty(exports,`W3CTraceContextPropagator`,{enumerable:!0,get:function(){return W3CTraceContextPropagator_1.W3CTraceContextPropagator}}),Object.defineProperty(exports,`parseTraceParent`,{enumerable:!0,get:function(){return W3CTraceContextPropagator_1.parseTraceParent}});var rpc_metadata_1=require_rpc_metadata();Object.defineProperty(exports,`RPCType`,{enumerable:!0,get:function(){return rpc_metadata_1.RPCType}}),Object.defineProperty(exports,`deleteRPCMetadata`,{enumerable:!0,get:function(){return rpc_metadata_1.deleteRPCMetadata}}),Object.defineProperty(exports,`getRPCMetadata`,{enumerable:!0,get:function(){return rpc_metadata_1.getRPCMetadata}}),Object.defineProperty(exports,`setRPCMetadata`,{enumerable:!0,get:function(){return rpc_metadata_1.setRPCMetadata}});var suppress_tracing_1=require_suppress_tracing();Object.defineProperty(exports,`isTracingSuppressed`,{enumerable:!0,get:function(){return suppress_tracing_1.isTracingSuppressed}}),Object.defineProperty(exports,`suppressTracing`,{enumerable:!0,get:function(){return suppress_tracing_1.suppressTracing}}),Object.defineProperty(exports,`unsuppressTracing`,{enumerable:!0,get:function(){return suppress_tracing_1.unsuppressTracing}});var TraceState_1=require_TraceState();Object.defineProperty(exports,`TraceState`,{enumerable:!0,get:function(){return TraceState_1.TraceState}});var merge_1=require_merge();Object.defineProperty(exports,`merge`,{enumerable:!0,get:function(){return merge_1.merge}});var timeout_1=require_timeout();Object.defineProperty(exports,`TimeoutError`,{enumerable:!0,get:function(){return timeout_1.TimeoutError}}),Object.defineProperty(exports,`callWithTimeout`,{enumerable:!0,get:function(){return timeout_1.callWithTimeout}});var url_1=require_url();Object.defineProperty(exports,`isUrlIgnored`,{enumerable:!0,get:function(){return url_1.isUrlIgnored}}),Object.defineProperty(exports,`urlMatches`,{enumerable:!0,get:function(){return url_1.urlMatches}});var callback_1=require_callback();Object.defineProperty(exports,`BindOnceFuture`,{enumerable:!0,get:function(){return callback_1.BindOnceFuture}});var configuration_1=require_configuration();Object.defineProperty(exports,`diagLogLevelFromString`,{enumerable:!0,get:function(){return configuration_1.diagLogLevelFromString}}),exports.internal={_export:require_exporter()._export}})),require_enums=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ExceptionEventName=void 0,exports.ExceptionEventName=`exception`})),require_Span=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SpanImpl=void 0;let api_1$15=__require(`@opentelemetry/api`),core_1=require_src$8(),semantic_conventions_1=__require(`@opentelemetry/semantic-conventions`),enums_1=require_enums();exports.SpanImpl=class{_spanContext;kind;parentSpanContext;attributes={};links=[];events=[];startTime;resource;instrumentationScope;_droppedAttributesCount=0;_droppedEventsCount=0;_droppedLinksCount=0;name;status={code:api_1$15.SpanStatusCode.UNSET};endTime=[0,0];_ended=!1;_duration=[-1,-1];_spanProcessor;_spanLimits;_attributeValueLengthLimit;_performanceStartTime;_performanceOffset;_startTimeProvided;constructor(opts){let now=Date.now();this._spanContext=opts.spanContext,this._performanceStartTime=core_1.otperformance.now(),this._performanceOffset=now-(this._performanceStartTime+(0,core_1.getTimeOrigin)()),this._startTimeProvided=opts.startTime!=null,this._spanLimits=opts.spanLimits,this._attributeValueLengthLimit=this._spanLimits.attributeValueLengthLimit||0,this._spanProcessor=opts.spanProcessor,this.name=opts.name,this.parentSpanContext=opts.parentSpanContext,this.kind=opts.kind,this.links=opts.links||[],this.startTime=this._getTime(opts.startTime??now),this.resource=opts.resource,this.instrumentationScope=opts.scope,opts.attributes!=null&&this.setAttributes(opts.attributes),this._spanProcessor.onStart(this,opts.context)}spanContext(){return this._spanContext}setAttribute(key,value){if(value==null||this._isSpanEnded())return this;if(key.length===0)return api_1$15.diag.warn(`Invalid attribute key: ${key}`),this;if(!(0,core_1.isAttributeValue)(value))return api_1$15.diag.warn(`Invalid attribute value set for key: ${key}`),this;let{attributeCountLimit}=this._spanLimits;return attributeCountLimit!==void 0&&Object.keys(this.attributes).length>=attributeCountLimit&&!Object.prototype.hasOwnProperty.call(this.attributes,key)?(this._droppedAttributesCount++,this):(this.attributes[key]=this._truncateToSize(value),this)}setAttributes(attributes){for(let[k,v]of Object.entries(attributes))this.setAttribute(k,v);return this}addEvent(name,attributesOrStartTime,timeStamp){if(this._isSpanEnded())return this;let{eventCountLimit}=this._spanLimits;if(eventCountLimit===0)return api_1$15.diag.warn(`No events allowed.`),this._droppedEventsCount++,this;eventCountLimit!==void 0&&this.events.length>=eventCountLimit&&(this._droppedEventsCount===0&&api_1$15.diag.debug(`Dropping extra events.`),this.events.shift(),this._droppedEventsCount++),(0,core_1.isTimeInput)(attributesOrStartTime)&&((0,core_1.isTimeInput)(timeStamp)||(timeStamp=attributesOrStartTime),attributesOrStartTime=void 0);let attributes=(0,core_1.sanitizeAttributes)(attributesOrStartTime);return this.events.push({name,attributes,time:this._getTime(timeStamp),droppedAttributesCount:0}),this}addLink(link){return this.links.push(link),this}addLinks(links){return this.links.push(...links),this}setStatus(status){return this._isSpanEnded()?this:(this.status={...status},this.status.message!=null&&typeof status.message!=`string`&&(api_1$15.diag.warn(`Dropping invalid status.message of type '${typeof status.message}', expected 'string'`),delete this.status.message),this)}updateName(name){return this._isSpanEnded()||(this.name=name),this}end(endTime){if(this._isSpanEnded()){api_1$15.diag.error(`${this.name} ${this._spanContext.traceId}-${this._spanContext.spanId} - You can only call end() on a span once.`);return}this._ended=!0,this.endTime=this._getTime(endTime),this._duration=(0,core_1.hrTimeDuration)(this.startTime,this.endTime),this._duration[0]<0&&(api_1$15.diag.warn(`Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.`,this.startTime,this.endTime),this.endTime=this.startTime.slice(),this._duration=[0,0]),this._droppedEventsCount>0&&api_1$15.diag.warn(`Dropped ${this._droppedEventsCount} events because eventCountLimit reached`),this._spanProcessor.onEnd(this)}_getTime(inp){if(typeof inp==`number`&&inp<=core_1.otperformance.now())return(0,core_1.hrTime)(inp+this._performanceOffset);if(typeof inp==`number`)return(0,core_1.millisToHrTime)(inp);if(inp instanceof Date)return(0,core_1.millisToHrTime)(inp.getTime());if((0,core_1.isTimeInputHrTime)(inp))return inp;if(this._startTimeProvided)return(0,core_1.millisToHrTime)(Date.now());let msDuration=core_1.otperformance.now()-this._performanceStartTime;return(0,core_1.addHrTimes)(this.startTime,(0,core_1.millisToHrTime)(msDuration))}isRecording(){return this._ended===!1}recordException(exception,time){let attributes={};typeof exception==`string`?attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE]=exception:exception&&(exception.code?attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE]=exception.code.toString():exception.name&&(attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE]=exception.name),exception.message&&(attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE]=exception.message),exception.stack&&(attributes[semantic_conventions_1.ATTR_EXCEPTION_STACKTRACE]=exception.stack)),attributes[semantic_conventions_1.ATTR_EXCEPTION_TYPE]||attributes[semantic_conventions_1.ATTR_EXCEPTION_MESSAGE]?this.addEvent(enums_1.ExceptionEventName,attributes,time):api_1$15.diag.warn(`Failed to record an exception ${exception}`)}get duration(){return this._duration}get ended(){return this._ended}get droppedAttributesCount(){return this._droppedAttributesCount}get droppedEventsCount(){return this._droppedEventsCount}get droppedLinksCount(){return this._droppedLinksCount}_isSpanEnded(){if(this._ended){let error=Error(`Operation attempted on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`);api_1$15.diag.warn(`Cannot execute the operation on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`,error)}return this._ended}_truncateToLimitUtil(value,limit){return value.length<=limit?value:value.substring(0,limit)}_truncateToSize(value){let limit=this._attributeValueLengthLimit;return limit<=0?(api_1$15.diag.warn(`Attribute value limit must be positive, got ${limit}`),value):typeof value==`string`?this._truncateToLimitUtil(value,limit):Array.isArray(value)?value.map(val=>typeof val==`string`?this._truncateToLimitUtil(val,limit):val):value}}})),require_Sampler=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SamplingDecision=void 0,(function(SamplingDecision){SamplingDecision[SamplingDecision.NOT_RECORD=0]=`NOT_RECORD`,SamplingDecision[SamplingDecision.RECORD=1]=`RECORD`,SamplingDecision[SamplingDecision.RECORD_AND_SAMPLED=2]=`RECORD_AND_SAMPLED`})(exports.SamplingDecision||={})})),require_AlwaysOffSampler=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.AlwaysOffSampler=void 0;let Sampler_1=require_Sampler();exports.AlwaysOffSampler=class{shouldSample(){return{decision:Sampler_1.SamplingDecision.NOT_RECORD}}toString(){return`AlwaysOffSampler`}}})),require_AlwaysOnSampler=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.AlwaysOnSampler=void 0;let Sampler_1=require_Sampler();exports.AlwaysOnSampler=class{shouldSample(){return{decision:Sampler_1.SamplingDecision.RECORD_AND_SAMPLED}}toString(){return`AlwaysOnSampler`}}})),require_ParentBasedSampler=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ParentBasedSampler=void 0;let api_1$14=__require(`@opentelemetry/api`),core_1=require_src$8(),AlwaysOffSampler_1=require_AlwaysOffSampler(),AlwaysOnSampler_1=require_AlwaysOnSampler();exports.ParentBasedSampler=class{_root;_remoteParentSampled;_remoteParentNotSampled;_localParentSampled;_localParentNotSampled;constructor(config){this._root=config.root,this._root||=((0,core_1.globalErrorHandler)(Error(`ParentBasedSampler must have a root sampler configured`)),new AlwaysOnSampler_1.AlwaysOnSampler),this._remoteParentSampled=config.remoteParentSampled??new AlwaysOnSampler_1.AlwaysOnSampler,this._remoteParentNotSampled=config.remoteParentNotSampled??new AlwaysOffSampler_1.AlwaysOffSampler,this._localParentSampled=config.localParentSampled??new AlwaysOnSampler_1.AlwaysOnSampler,this._localParentNotSampled=config.localParentNotSampled??new AlwaysOffSampler_1.AlwaysOffSampler}shouldSample(context$1,traceId,spanName,spanKind,attributes,links){let parentContext=api_1$14.trace.getSpanContext(context$1);return!parentContext||!(0,api_1$14.isSpanContextValid)(parentContext)?this._root.shouldSample(context$1,traceId,spanName,spanKind,attributes,links):parentContext.isRemote?parentContext.traceFlags&api_1$14.TraceFlags.SAMPLED?this._remoteParentSampled.shouldSample(context$1,traceId,spanName,spanKind,attributes,links):this._remoteParentNotSampled.shouldSample(context$1,traceId,spanName,spanKind,attributes,links):parentContext.traceFlags&api_1$14.TraceFlags.SAMPLED?this._localParentSampled.shouldSample(context$1,traceId,spanName,spanKind,attributes,links):this._localParentNotSampled.shouldSample(context$1,traceId,spanName,spanKind,attributes,links)}toString(){return`ParentBased{root=${this._root.toString()}, remoteParentSampled=${this._remoteParentSampled.toString()}, remoteParentNotSampled=${this._remoteParentNotSampled.toString()}, localParentSampled=${this._localParentSampled.toString()}, localParentNotSampled=${this._localParentNotSampled.toString()}}`}}})),require_TraceIdRatioBasedSampler=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.TraceIdRatioBasedSampler=void 0;let api_1$13=__require(`@opentelemetry/api`),Sampler_1=require_Sampler();exports.TraceIdRatioBasedSampler=class{_ratio;_upperBound;constructor(_ratio=0){this._ratio=_ratio,this._ratio=this._normalize(_ratio),this._upperBound=Math.floor(this._ratio*4294967295)}shouldSample(context$1,traceId){return{decision:(0,api_1$13.isValidTraceId)(traceId)&&this._accumulate(traceId)<this._upperBound?Sampler_1.SamplingDecision.RECORD_AND_SAMPLED:Sampler_1.SamplingDecision.NOT_RECORD}}toString(){return`TraceIdRatioBased{${this._ratio}}`}_normalize(ratio){return typeof ratio!=`number`||isNaN(ratio)?0:ratio>=1?1:ratio<=0?0:ratio}_accumulate(traceId){let accumulation=0;for(let i=0;i<traceId.length/8;i++){let pos=i*8,part=parseInt(traceId.slice(pos,pos+8),16);accumulation=(accumulation^part)>>>0}return accumulation}}})),require_config$2=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.buildSamplerFromEnv=exports.loadDefaultConfig=void 0;let api_1$12=__require(`@opentelemetry/api`),core_1=require_src$8(),AlwaysOffSampler_1=require_AlwaysOffSampler(),AlwaysOnSampler_1=require_AlwaysOnSampler(),ParentBasedSampler_1=require_ParentBasedSampler(),TraceIdRatioBasedSampler_1=require_TraceIdRatioBasedSampler();var TracesSamplerValues;(function(TracesSamplerValues){TracesSamplerValues.AlwaysOff=`always_off`,TracesSamplerValues.AlwaysOn=`always_on`,TracesSamplerValues.ParentBasedAlwaysOff=`parentbased_always_off`,TracesSamplerValues.ParentBasedAlwaysOn=`parentbased_always_on`,TracesSamplerValues.ParentBasedTraceIdRatio=`parentbased_traceidratio`,TracesSamplerValues.TraceIdRatio=`traceidratio`})(TracesSamplerValues||={});let DEFAULT_RATIO=1;function loadDefaultConfig(){return{sampler:buildSamplerFromEnv(),forceFlushTimeoutMillis:3e4,generalLimits:{attributeValueLengthLimit:(0,core_1.getNumberFromEnv)(`OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT`)??1/0,attributeCountLimit:(0,core_1.getNumberFromEnv)(`OTEL_ATTRIBUTE_COUNT_LIMIT`)??128},spanLimits:{attributeValueLengthLimit:(0,core_1.getNumberFromEnv)(`OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT`)??1/0,attributeCountLimit:(0,core_1.getNumberFromEnv)(`OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT`)??128,linkCountLimit:(0,core_1.getNumberFromEnv)(`OTEL_SPAN_LINK_COUNT_LIMIT`)??128,eventCountLimit:(0,core_1.getNumberFromEnv)(`OTEL_SPAN_EVENT_COUNT_LIMIT`)??128,attributePerEventCountLimit:(0,core_1.getNumberFromEnv)(`OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT`)??128,attributePerLinkCountLimit:(0,core_1.getNumberFromEnv)(`OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT`)??128}}}exports.loadDefaultConfig=loadDefaultConfig;function buildSamplerFromEnv(){let sampler=(0,core_1.getStringFromEnv)(`OTEL_TRACES_SAMPLER`)??TracesSamplerValues.ParentBasedAlwaysOn;switch(sampler){case TracesSamplerValues.AlwaysOn:return new AlwaysOnSampler_1.AlwaysOnSampler;case TracesSamplerValues.AlwaysOff:return new AlwaysOffSampler_1.AlwaysOffSampler;case TracesSamplerValues.ParentBasedAlwaysOn:return new ParentBasedSampler_1.ParentBasedSampler({root:new AlwaysOnSampler_1.AlwaysOnSampler});case TracesSamplerValues.ParentBasedAlwaysOff:return new ParentBasedSampler_1.ParentBasedSampler({root:new AlwaysOffSampler_1.AlwaysOffSampler});case TracesSamplerValues.TraceIdRatio:return new TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv());case TracesSamplerValues.ParentBasedTraceIdRatio:return new ParentBasedSampler_1.ParentBasedSampler({root:new TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv())});default:return api_1$12.diag.error(`OTEL_TRACES_SAMPLER value "${sampler}" invalid, defaulting to "${TracesSamplerValues.ParentBasedAlwaysOn}".`),new ParentBasedSampler_1.ParentBasedSampler({root:new AlwaysOnSampler_1.AlwaysOnSampler})}}exports.buildSamplerFromEnv=buildSamplerFromEnv;function getSamplerProbabilityFromEnv(){let probability=(0,core_1.getNumberFromEnv)(`OTEL_TRACES_SAMPLER_ARG`);return probability==null?(api_1$12.diag.error(`OTEL_TRACES_SAMPLER_ARG is blank, defaulting to 1.`),1):probability<0||probability>1?(api_1$12.diag.error(`OTEL_TRACES_SAMPLER_ARG=${probability} was given, but it is out of range ([0..1]), defaulting to 1.`),1):probability}})),require_utility=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.reconfigureLimits=exports.mergeConfig=exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT=exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT=void 0;let config_1=require_config$2(),core_1=require_src$8();exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT=128,exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT=1/0;function mergeConfig(userConfig){let perInstanceDefaults={sampler:(0,config_1.buildSamplerFromEnv)()},DEFAULT_CONFIG=(0,config_1.loadDefaultConfig)(),target=Object.assign({},DEFAULT_CONFIG,perInstanceDefaults,userConfig);return target.generalLimits=Object.assign({},DEFAULT_CONFIG.generalLimits,userConfig.generalLimits||{}),target.spanLimits=Object.assign({},DEFAULT_CONFIG.spanLimits,userConfig.spanLimits||{}),target}exports.mergeConfig=mergeConfig;function reconfigureLimits(userConfig){let spanLimits=Object.assign({},userConfig.spanLimits);return spanLimits.attributeCountLimit=userConfig.spanLimits?.attributeCountLimit??userConfig.generalLimits?.attributeCountLimit??(0,core_1.getNumberFromEnv)(`OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT`)??(0,core_1.getNumberFromEnv)(`OTEL_ATTRIBUTE_COUNT_LIMIT`)??exports.DEFAULT_ATTRIBUTE_COUNT_LIMIT,spanLimits.attributeValueLengthLimit=userConfig.spanLimits?.attributeValueLengthLimit??userConfig.generalLimits?.attributeValueLengthLimit??(0,core_1.getNumberFromEnv)(`OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT`)??(0,core_1.getNumberFromEnv)(`OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT`)??exports.DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT,Object.assign({},userConfig,{spanLimits})}exports.reconfigureLimits=reconfigureLimits})),require_BatchSpanProcessorBase=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BatchSpanProcessorBase=void 0;let api_1$11=__require(`@opentelemetry/api`),core_1=require_src$8();exports.BatchSpanProcessorBase=class{_exporter;_maxExportBatchSize;_maxQueueSize;_scheduledDelayMillis;_exportTimeoutMillis;_isExporting=!1;_finishedSpans=[];_timer;_shutdownOnce;_droppedSpansCount=0;constructor(_exporter,config){this._exporter=_exporter,this._maxExportBatchSize=typeof config?.maxExportBatchSize==`number`?config.maxExportBatchSize:(0,core_1.getNumberFromEnv)(`OTEL_BSP_MAX_EXPORT_BATCH_SIZE`)??512,this._maxQueueSize=typeof config?.maxQueueSize==`number`?config.maxQueueSize:(0,core_1.getNumberFromEnv)(`OTEL_BSP_MAX_QUEUE_SIZE`)??2048,this._scheduledDelayMillis=typeof config?.scheduledDelayMillis==`number`?config.scheduledDelayMillis:(0,core_1.getNumberFromEnv)(`OTEL_BSP_SCHEDULE_DELAY`)??5e3,this._exportTimeoutMillis=typeof config?.exportTimeoutMillis==`number`?config.exportTimeoutMillis:(0,core_1.getNumberFromEnv)(`OTEL_BSP_EXPORT_TIMEOUT`)??3e4,this._shutdownOnce=new core_1.BindOnceFuture(this._shutdown,this),this._maxExportBatchSize>this._maxQueueSize&&(api_1$11.diag.warn(`BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize`),this._maxExportBatchSize=this._maxQueueSize)}forceFlush(){return this._shutdownOnce.isCalled?this._shutdownOnce.promise:this._flushAll()}onStart(_span,_parentContext){}onEnd(span){this._shutdownOnce.isCalled||(span.spanContext().traceFlags&api_1$11.TraceFlags.SAMPLED)!==0&&this._addToBuffer(span)}shutdown(){return this._shutdownOnce.call()}_shutdown(){return Promise.resolve().then(()=>this.onShutdown()).then(()=>this._flushAll()).then(()=>this._exporter.shutdown())}_addToBuffer(span){if(this._finishedSpans.length>=this._maxQueueSize){this._droppedSpansCount===0&&api_1$11.diag.debug(`maxQueueSize reached, dropping spans`),this._droppedSpansCount++;return}this._droppedSpansCount>0&&(api_1$11.diag.warn(`Dropped ${this._droppedSpansCount} spans because maxQueueSize reached`),this._droppedSpansCount=0),this._finishedSpans.push(span),this._maybeStartTimer()}_flushAll(){return new Promise((resolve,reject)=>{let promises=[],count=Math.ceil(this._finishedSpans.length/this._maxExportBatchSize);for(let i=0,j=count;i<j;i++)promises.push(this._flushOneBatch());Promise.all(promises).then(()=>{resolve()}).catch(reject)})}_flushOneBatch(){return this._clearTimer(),this._finishedSpans.length===0?Promise.resolve():new Promise((resolve,reject)=>{let timer=setTimeout(()=>{reject(Error(`Timeout`))},this._exportTimeoutMillis);api_1$11.context.with((0,core_1.suppressTracing)(api_1$11.context.active()),()=>{let spans;this._finishedSpans.length<=this._maxExportBatchSize?(spans=this._finishedSpans,this._finishedSpans=[]):spans=this._finishedSpans.splice(0,this._maxExportBatchSize);let doExport=()=>this._exporter.export(spans,result=>{clearTimeout(timer),result.code===core_1.ExportResultCode.SUCCESS?resolve():reject(result.error??Error(`BatchSpanProcessor: span export failed`))}),pendingResources=null;for(let i=0,len=spans.length;i<len;i++){let span=spans[i];span.resource.asyncAttributesPending&&span.resource.waitForAsyncAttributes&&(pendingResources??=[],pendingResources.push(span.resource.waitForAsyncAttributes()))}pendingResources===null?doExport():Promise.all(pendingResources).then(doExport,err=>{(0,core_1.globalErrorHandler)(err),reject(err)})})})}_maybeStartTimer(){if(this._isExporting)return;let flush=()=>{this._isExporting=!0,this._flushOneBatch().finally(()=>{this._isExporting=!1,this._finishedSpans.length>0&&(this._clearTimer(),this._maybeStartTimer())}).catch(e=>{this._isExporting=!1,(0,core_1.globalErrorHandler)(e)})};if(this._finishedSpans.length>=this._maxExportBatchSize)return flush();this._timer===void 0&&(this._timer=setTimeout(()=>flush(),this._scheduledDelayMillis),typeof this._timer!=`number`&&this._timer.unref())}_clearTimer(){this._timer!==void 0&&(clearTimeout(this._timer),this._timer=void 0)}}})),require_BatchSpanProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BatchSpanProcessor=void 0;let BatchSpanProcessorBase_1=require_BatchSpanProcessorBase();exports.BatchSpanProcessor=class extends BatchSpanProcessorBase_1.BatchSpanProcessorBase{onShutdown(){}}})),require_RandomIdGenerator=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.RandomIdGenerator=void 0;let SPAN_ID_BYTES=8,TRACE_ID_BYTES=16;exports.RandomIdGenerator=class{generateTraceId=getIdGenerator(16);generateSpanId=getIdGenerator(8)};let SHARED_BUFFER=Buffer.allocUnsafe(16);function getIdGenerator(bytes){return function(){for(let i=0;i<bytes/4;i++)SHARED_BUFFER.writeUInt32BE(Math.random()*2**32>>>0,i*4);for(let i=0;i<bytes&&!(SHARED_BUFFER[i]>0);i++)i===bytes-1&&(SHARED_BUFFER[bytes-1]=1);return SHARED_BUFFER.toString(`hex`,0,bytes)}}})),require_node$4=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.RandomIdGenerator=exports.BatchSpanProcessor=void 0;var BatchSpanProcessor_1=require_BatchSpanProcessor();Object.defineProperty(exports,`BatchSpanProcessor`,{enumerable:!0,get:function(){return BatchSpanProcessor_1.BatchSpanProcessor}});var RandomIdGenerator_1=require_RandomIdGenerator();Object.defineProperty(exports,`RandomIdGenerator`,{enumerable:!0,get:function(){return RandomIdGenerator_1.RandomIdGenerator}})})),require_platform$4=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.RandomIdGenerator=exports.BatchSpanProcessor=void 0;var node_1=require_node$4();Object.defineProperty(exports,`BatchSpanProcessor`,{enumerable:!0,get:function(){return node_1.BatchSpanProcessor}}),Object.defineProperty(exports,`RandomIdGenerator`,{enumerable:!0,get:function(){return node_1.RandomIdGenerator}})})),require_Tracer=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.Tracer=void 0;let api$5=__require(`@opentelemetry/api`),core_1=require_src$8(),Span_1=require_Span(),utility_1=require_utility(),platform_1=require_platform$4();exports.Tracer=class{_sampler;_generalLimits;_spanLimits;_idGenerator;instrumentationScope;_resource;_spanProcessor;constructor(instrumentationScope,config,resource,spanProcessor){let localConfig=(0,utility_1.mergeConfig)(config);this._sampler=localConfig.sampler,this._generalLimits=localConfig.generalLimits,this._spanLimits=localConfig.spanLimits,this._idGenerator=config.idGenerator||new platform_1.RandomIdGenerator,this._resource=resource,this._spanProcessor=spanProcessor,this.instrumentationScope=instrumentationScope}startSpan(name,options={},context$1=api$5.context.active()){options.root&&(context$1=api$5.trace.deleteSpan(context$1));let parentSpan=api$5.trace.getSpan(context$1);if((0,core_1.isTracingSuppressed)(context$1))return api$5.diag.debug(`Instrumentation suppressed, returning Noop Span`),api$5.trace.wrapSpanContext(api$5.INVALID_SPAN_CONTEXT);let parentSpanContext=parentSpan?.spanContext(),spanId=this._idGenerator.generateSpanId(),validParentSpanContext,traceId,traceState;!parentSpanContext||!api$5.trace.isSpanContextValid(parentSpanContext)?traceId=this._idGenerator.generateTraceId():(traceId=parentSpanContext.traceId,traceState=parentSpanContext.traceState,validParentSpanContext=parentSpanContext);let spanKind=options.kind??api$5.SpanKind.INTERNAL,links=(options.links??[]).map(link=>({context:link.context,attributes:(0,core_1.sanitizeAttributes)(link.attributes)})),attributes=(0,core_1.sanitizeAttributes)(options.attributes),samplingResult=this._sampler.shouldSample(context$1,traceId,name,spanKind,attributes,links);traceState=samplingResult.traceState??traceState;let traceFlags=samplingResult.decision===api$5.SamplingDecision.RECORD_AND_SAMPLED?api$5.TraceFlags.SAMPLED:api$5.TraceFlags.NONE,spanContext={traceId,spanId,traceFlags,traceState};if(samplingResult.decision===api$5.SamplingDecision.NOT_RECORD)return api$5.diag.debug(`Recording is off, propagating context in a non-recording span`),api$5.trace.wrapSpanContext(spanContext);let initAttributes=(0,core_1.sanitizeAttributes)(Object.assign(attributes,samplingResult.attributes));return new Span_1.SpanImpl({resource:this._resource,scope:this.instrumentationScope,context:context$1,spanContext,name,kind:spanKind,links,parentSpanContext:validParentSpanContext,attributes:initAttributes,startTime:options.startTime,spanProcessor:this._spanProcessor,spanLimits:this._spanLimits})}startActiveSpan(name,arg2,arg3,arg4){let opts,ctx,fn;if(arguments.length<2)return;arguments.length===2?fn=arg2:arguments.length===3?(opts=arg2,fn=arg3):(opts=arg2,ctx=arg3,fn=arg4);let parentContext=ctx??api$5.context.active(),span=this.startSpan(name,opts,parentContext),contextWithSpanSet=api$5.trace.setSpan(parentContext,span);return api$5.context.with(contextWithSpanSet,fn,void 0,span)}getGeneralLimits(){return this._generalLimits}getSpanLimits(){return this._spanLimits}}})),require_MultiSpanProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.MultiSpanProcessor=void 0;let core_1=require_src$8();exports.MultiSpanProcessor=class{_spanProcessors;constructor(_spanProcessors){this._spanProcessors=_spanProcessors}forceFlush(){let promises=[];for(let spanProcessor of this._spanProcessors)promises.push(spanProcessor.forceFlush());return new Promise(resolve=>{Promise.all(promises).then(()=>{resolve()}).catch(error=>{(0,core_1.globalErrorHandler)(error||Error(`MultiSpanProcessor: forceFlush failed`)),resolve()})})}onStart(span,context$1){for(let spanProcessor of this._spanProcessors)spanProcessor.onStart(span,context$1)}onEnd(span){for(let spanProcessor of this._spanProcessors)spanProcessor.onEnd(span)}shutdown(){let promises=[];for(let spanProcessor of this._spanProcessors)promises.push(spanProcessor.shutdown());return new Promise((resolve,reject)=>{Promise.all(promises).then(()=>{resolve()},reject)})}}})),require_BasicTracerProvider=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BasicTracerProvider=exports.ForceFlushState=void 0;let core_1=require_src$8(),resources_1$2=__require(`@opentelemetry/resources`),Tracer_1=require_Tracer(),config_1=require_config$2(),MultiSpanProcessor_1=require_MultiSpanProcessor(),utility_1=require_utility();var ForceFlushState;(function(ForceFlushState){ForceFlushState[ForceFlushState.resolved=0]=`resolved`,ForceFlushState[ForceFlushState.timeout=1]=`timeout`,ForceFlushState[ForceFlushState.error=2]=`error`,ForceFlushState[ForceFlushState.unresolved=3]=`unresolved`})(ForceFlushState=exports.ForceFlushState||={}),exports.BasicTracerProvider=class{_config;_tracers=new Map;_resource;_activeSpanProcessor;constructor(config={}){let mergedConfig=(0,core_1.merge)({},(0,config_1.loadDefaultConfig)(),(0,utility_1.reconfigureLimits)(config));this._resource=mergedConfig.resource??(0,resources_1$2.defaultResource)(),this._config=Object.assign({},mergedConfig,{resource:this._resource});let spanProcessors=[];config.spanProcessors?.length&&spanProcessors.push(...config.spanProcessors),this._activeSpanProcessor=new MultiSpanProcessor_1.MultiSpanProcessor(spanProcessors)}getTracer(name,version$1,options){let key=`${name}@${version$1||``}:${options?.schemaUrl||``}`;return this._tracers.has(key)||this._tracers.set(key,new Tracer_1.Tracer({name,version:version$1,schemaUrl:options?.schemaUrl},this._config,this._resource,this._activeSpanProcessor)),this._tracers.get(key)}forceFlush(){let timeout=this._config.forceFlushTimeoutMillis,promises=this._activeSpanProcessor._spanProcessors.map(spanProcessor=>new Promise(resolve=>{let state,timeoutInterval=setTimeout(()=>{resolve(Error(`Span processor did not completed within timeout period of ${timeout} ms`)),state=ForceFlushState.timeout},timeout);spanProcessor.forceFlush().then(()=>{clearTimeout(timeoutInterval),state!==ForceFlushState.timeout&&(state=ForceFlushState.resolved,resolve(state))}).catch(error=>{clearTimeout(timeoutInterval),state=ForceFlushState.error,resolve(error)})}));return new Promise((resolve,reject)=>{Promise.all(promises).then(results=>{let errors=results.filter(result=>result!==ForceFlushState.resolved);errors.length>0?reject(errors):resolve()}).catch(error=>reject([error]))})}shutdown(){return this._activeSpanProcessor.shutdown()}}})),require_ConsoleSpanExporter=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ConsoleSpanExporter=void 0;let core_1=require_src$8();exports.ConsoleSpanExporter=class{export(spans,resultCallback){return this._sendSpans(spans,resultCallback)}shutdown(){return this._sendSpans([]),this.forceFlush()}forceFlush(){return Promise.resolve()}_exportInfo(span){return{resource:{attributes:span.resource.attributes},instrumentationScope:span.instrumentationScope,traceId:span.spanContext().traceId,parentSpanContext:span.parentSpanContext,traceState:span.spanContext().traceState?.serialize(),name:span.name,id:span.spanContext().spanId,kind:span.kind,timestamp:(0,core_1.hrTimeToMicroseconds)(span.startTime),duration:(0,core_1.hrTimeToMicroseconds)(span.duration),attributes:span.attributes,status:span.status,events:span.events,links:span.links}}_sendSpans(spans,done){for(let span of spans)console.dir(this._exportInfo(span),{depth:3});if(done)return done({code:core_1.ExportResultCode.SUCCESS})}}})),require_InMemorySpanExporter=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.InMemorySpanExporter=void 0;let core_1=require_src$8();exports.InMemorySpanExporter=class{_finishedSpans=[];_stopped=!1;export(spans,resultCallback){if(this._stopped)return resultCallback({code:core_1.ExportResultCode.FAILED,error:Error(`Exporter has been stopped`)});this._finishedSpans.push(...spans),setTimeout(()=>resultCallback({code:core_1.ExportResultCode.SUCCESS}),0)}shutdown(){return this._stopped=!0,this._finishedSpans=[],this.forceFlush()}forceFlush(){return Promise.resolve()}reset(){this._finishedSpans=[]}getFinishedSpans(){return this._finishedSpans}}})),require_SimpleSpanProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SimpleSpanProcessor=void 0;let api_1$10=__require(`@opentelemetry/api`),core_1=require_src$8();exports.SimpleSpanProcessor=class{_exporter;_shutdownOnce;_pendingExports;constructor(_exporter){this._exporter=_exporter,this._shutdownOnce=new core_1.BindOnceFuture(this._shutdown,this),this._pendingExports=new Set}async forceFlush(){await Promise.all(Array.from(this._pendingExports)),this._exporter.forceFlush&&await this._exporter.forceFlush()}onStart(_span,_parentContext){}onEnd(span){if(this._shutdownOnce.isCalled||(span.spanContext().traceFlags&api_1$10.TraceFlags.SAMPLED)===0)return;let pendingExport=this._doExport(span).catch(err=>(0,core_1.globalErrorHandler)(err));this._pendingExports.add(pendingExport),pendingExport.finally(()=>this._pendingExports.delete(pendingExport))}async _doExport(span){span.resource.asyncAttributesPending&&await span.resource.waitForAsyncAttributes?.();let result=await core_1.internal._export(this._exporter,[span]);if(result.code!==core_1.ExportResultCode.SUCCESS)throw result.error??Error(`SimpleSpanProcessor: span export failed (status ${result})`)}shutdown(){return this._shutdownOnce.call()}_shutdown(){return this._exporter.shutdown()}}})),require_NoopSpanProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.NoopSpanProcessor=void 0,exports.NoopSpanProcessor=class{onStart(_span,_context){}onEnd(_span){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}})),require_src$7=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SamplingDecision=exports.TraceIdRatioBasedSampler=exports.ParentBasedSampler=exports.AlwaysOnSampler=exports.AlwaysOffSampler=exports.NoopSpanProcessor=exports.SimpleSpanProcessor=exports.InMemorySpanExporter=exports.ConsoleSpanExporter=exports.RandomIdGenerator=exports.BatchSpanProcessor=exports.BasicTracerProvider=void 0;var BasicTracerProvider_1=require_BasicTracerProvider();Object.defineProperty(exports,`BasicTracerProvider`,{enumerable:!0,get:function(){return BasicTracerProvider_1.BasicTracerProvider}});var platform_1=require_platform$4();Object.defineProperty(exports,`BatchSpanProcessor`,{enumerable:!0,get:function(){return platform_1.BatchSpanProcessor}}),Object.defineProperty(exports,`RandomIdGenerator`,{enumerable:!0,get:function(){return platform_1.RandomIdGenerator}});var ConsoleSpanExporter_1=require_ConsoleSpanExporter();Object.defineProperty(exports,`ConsoleSpanExporter`,{enumerable:!0,get:function(){return ConsoleSpanExporter_1.ConsoleSpanExporter}});var InMemorySpanExporter_1=require_InMemorySpanExporter();Object.defineProperty(exports,`InMemorySpanExporter`,{enumerable:!0,get:function(){return InMemorySpanExporter_1.InMemorySpanExporter}});var SimpleSpanProcessor_1=require_SimpleSpanProcessor();Object.defineProperty(exports,`SimpleSpanProcessor`,{enumerable:!0,get:function(){return SimpleSpanProcessor_1.SimpleSpanProcessor}});var NoopSpanProcessor_1=require_NoopSpanProcessor();Object.defineProperty(exports,`NoopSpanProcessor`,{enumerable:!0,get:function(){return NoopSpanProcessor_1.NoopSpanProcessor}});var AlwaysOffSampler_1=require_AlwaysOffSampler();Object.defineProperty(exports,`AlwaysOffSampler`,{enumerable:!0,get:function(){return AlwaysOffSampler_1.AlwaysOffSampler}});var AlwaysOnSampler_1=require_AlwaysOnSampler();Object.defineProperty(exports,`AlwaysOnSampler`,{enumerable:!0,get:function(){return AlwaysOnSampler_1.AlwaysOnSampler}});var ParentBasedSampler_1=require_ParentBasedSampler();Object.defineProperty(exports,`ParentBasedSampler`,{enumerable:!0,get:function(){return ParentBasedSampler_1.ParentBasedSampler}});var TraceIdRatioBasedSampler_1=require_TraceIdRatioBasedSampler();Object.defineProperty(exports,`TraceIdRatioBasedSampler`,{enumerable:!0,get:function(){return TraceIdRatioBasedSampler_1.TraceIdRatioBasedSampler}});var Sampler_1=require_Sampler();Object.defineProperty(exports,`SamplingDecision`,{enumerable:!0,get:function(){return Sampler_1.SamplingDecision}})})),require_traces=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.Tracer=exports.installTraceContextManager=exports.isTraceContextWorking=exports.getActiveSpan=exports.runWithTrace=exports.SpanStatusCode=void 0;let utils_1=require_utils$3();var SpanStatusCode;(function(SpanStatusCode$1){SpanStatusCode$1[SpanStatusCode$1.UNSET=0]=`UNSET`,SpanStatusCode$1[SpanStatusCode$1.OK=1]=`OK`,SpanStatusCode$1[SpanStatusCode$1.ERROR=2]=`ERROR`})(SpanStatusCode||(exports.SpanStatusCode=SpanStatusCode={}));var StubSpan=class{attributes={};setStatus(_status){return this}setAttribute(_key,_attribute){return this}addEvent(_name,_attributesOrStartTime,_timeStamp){return this}};function runWithTrace(span,func){if(!utils_1.globalParams.enableOTLP)return func();let{context:context$1,trace:trace$1}=__require(`@opentelemetry/api`);return context$1.with(trace$1.setSpan(context$1.active(),span),func)}exports.runWithTrace=runWithTrace;function getActiveSpan(){if(!utils_1.globalParams.enableOTLP)return;let{trace:trace$1}=__require(`@opentelemetry/api`);return trace$1.getActiveSpan()}exports.getActiveSpan=getActiveSpan;function isTraceContextWorking(){if(!utils_1.globalParams.enableOTLP)return!1;let{context:context$1,trace:trace$1}=__require(`@opentelemetry/api`),span=trace$1.getTracer(`otel-bootstrap-check`).startSpan(`probe`),testContext=trace$1.setSpan(context$1.active(),span),visible;return context$1.with(testContext,()=>{visible=trace$1.getSpan(context$1.active())===span}),span.end?.(),visible===!0}exports.isTraceContextWorking=isTraceContextWorking;function installTraceContextManager(appName=`dbos`){if(!utils_1.globalParams.enableOTLP)return;let{AsyncLocalStorageContextManager}=require_src$9(),{context:context$1,trace:trace$1}=__require(`@opentelemetry/api`),{BasicTracerProvider}=require_src$7(),contextManager=new AsyncLocalStorageContextManager;contextManager.enable(),context$1.setGlobalContextManager(contextManager);let provider=new BasicTracerProvider({resource:{attributes:{"service.name":appName}}});trace$1.setGlobalTracerProvider(provider)}exports.installTraceContextManager=installTraceContextManager,exports.Tracer=class{telemetryCollector;applicationID;executorID;constructor(telemetryCollector,appName=`dbos`){if(this.telemetryCollector=telemetryCollector,this.applicationID=utils_1.globalParams.appID,this.executorID=utils_1.globalParams.executorID,!utils_1.globalParams.enableOTLP)return;let{trace:trace$1}=__require(`@opentelemetry/api`),{BasicTracerProvider}=require_src$7(),tracer=new BasicTracerProvider({resource:{attributes:{"service.name":appName}}});trace$1.setGlobalTracerProvider(tracer)}startSpanWithContext(spanContext,name,attributes){if(!utils_1.globalParams.enableOTLP)return new StubSpan;let opentelemetry=__require(`@opentelemetry/api`),tracer=opentelemetry.trace.getTracer(`dbos-tracer`),ctx=opentelemetry.trace.setSpanContext(opentelemetry.context.active(),spanContext);return tracer.startSpan(name,{startTime:performance.now(),attributes},ctx)}startSpan(name,attributes,inputSpan){if(!utils_1.globalParams.enableOTLP)return new StubSpan;let parentSpan=inputSpan,opentelemetry=__require(`@opentelemetry/api`),{hrTime}=require_src$8(),tracer=opentelemetry.trace.getTracer(`dbos-tracer`),startTime=hrTime(performance.now());if(parentSpan){let ctx=opentelemetry.trace.setSpan(opentelemetry.context.active(),parentSpan);return tracer.startSpan(name,{startTime,attributes},ctx)}else return tracer.startSpan(name,{startTime,attributes})}endSpan(inputSpan){if(!utils_1.globalParams.enableOTLP)return;let{hrTime}=require_src$8(),span=inputSpan;span.setAttributes({applicationID:this.applicationID,applicationVersion:utils_1.globalParams.appVersion}),span.attributes&&!(`executorID`in span.attributes)&&span.setAttribute(`executorID`,this.executorID),span.end(hrTime(performance.now())),this.telemetryCollector.push(span)}}})),require_LogRecord=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SeverityNumber=void 0,(function(SeverityNumber){SeverityNumber[SeverityNumber.UNSPECIFIED=0]=`UNSPECIFIED`,SeverityNumber[SeverityNumber.TRACE=1]=`TRACE`,SeverityNumber[SeverityNumber.TRACE2=2]=`TRACE2`,SeverityNumber[SeverityNumber.TRACE3=3]=`TRACE3`,SeverityNumber[SeverityNumber.TRACE4=4]=`TRACE4`,SeverityNumber[SeverityNumber.DEBUG=5]=`DEBUG`,SeverityNumber[SeverityNumber.DEBUG2=6]=`DEBUG2`,SeverityNumber[SeverityNumber.DEBUG3=7]=`DEBUG3`,SeverityNumber[SeverityNumber.DEBUG4=8]=`DEBUG4`,SeverityNumber[SeverityNumber.INFO=9]=`INFO`,SeverityNumber[SeverityNumber.INFO2=10]=`INFO2`,SeverityNumber[SeverityNumber.INFO3=11]=`INFO3`,SeverityNumber[SeverityNumber.INFO4=12]=`INFO4`,SeverityNumber[SeverityNumber.WARN=13]=`WARN`,SeverityNumber[SeverityNumber.WARN2=14]=`WARN2`,SeverityNumber[SeverityNumber.WARN3=15]=`WARN3`,SeverityNumber[SeverityNumber.WARN4=16]=`WARN4`,SeverityNumber[SeverityNumber.ERROR=17]=`ERROR`,SeverityNumber[SeverityNumber.ERROR2=18]=`ERROR2`,SeverityNumber[SeverityNumber.ERROR3=19]=`ERROR3`,SeverityNumber[SeverityNumber.ERROR4=20]=`ERROR4`,SeverityNumber[SeverityNumber.FATAL=21]=`FATAL`,SeverityNumber[SeverityNumber.FATAL2=22]=`FATAL2`,SeverityNumber[SeverityNumber.FATAL3=23]=`FATAL3`,SeverityNumber[SeverityNumber.FATAL4=24]=`FATAL4`})(exports.SeverityNumber||={})})),require_NoopLogger=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.NOOP_LOGGER=exports.NoopLogger=void 0;var NoopLogger=class{emit(_logRecord){}};exports.NoopLogger=NoopLogger,exports.NOOP_LOGGER=new NoopLogger})),require_NoopLoggerProvider=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.NOOP_LOGGER_PROVIDER=exports.NoopLoggerProvider=void 0;let NoopLogger_1=require_NoopLogger();var NoopLoggerProvider=class{getLogger(_name,_version,_options){return new NoopLogger_1.NoopLogger}};exports.NoopLoggerProvider=NoopLoggerProvider,exports.NOOP_LOGGER_PROVIDER=new NoopLoggerProvider})),require_ProxyLogger=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ProxyLogger=void 0;let NoopLogger_1=require_NoopLogger();exports.ProxyLogger=class{constructor(_provider,name,version$1,options){this._provider=_provider,this.name=name,this.version=version$1,this.options=options}emit(logRecord){this._getLogger().emit(logRecord)}_getLogger(){if(this._delegate)return this._delegate;let logger=this._provider._getDelegateLogger(this.name,this.version,this.options);return logger?(this._delegate=logger,this._delegate):NoopLogger_1.NOOP_LOGGER}}})),require_ProxyLoggerProvider=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ProxyLoggerProvider=void 0;let NoopLoggerProvider_1=require_NoopLoggerProvider(),ProxyLogger_1=require_ProxyLogger();exports.ProxyLoggerProvider=class{getLogger(name,version$1,options){var _a;return this._getDelegateLogger(name,version$1,options)??new ProxyLogger_1.ProxyLogger(this,name,version$1,options)}_getDelegate(){var _a;return this._delegate??NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER}_setDelegate(delegate){this._delegate=delegate}_getDelegateLogger(name,version$1,options){var _a;return this._delegate?.getLogger(name,version$1,options)}}})),require_globalThis=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports._globalThis=void 0,exports._globalThis=typeof globalThis==`object`?globalThis:global})),require_node$3=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports._globalThis=void 0;var globalThis_1=require_globalThis();Object.defineProperty(exports,`_globalThis`,{enumerable:!0,get:function(){return globalThis_1._globalThis}})})),require_platform$3=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports._globalThis=void 0;var node_1=require_node$3();Object.defineProperty(exports,`_globalThis`,{enumerable:!0,get:function(){return node_1._globalThis}})})),require_global_utils=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.API_BACKWARDS_COMPATIBILITY_VERSION=exports.makeGetter=exports._global=exports.GLOBAL_LOGS_API_KEY=void 0;let platform_1=require_platform$3();exports.GLOBAL_LOGS_API_KEY=Symbol.for(`io.opentelemetry.js.api.logs`),exports._global=platform_1._globalThis;function makeGetter(requiredVersion,instance,fallback){return version$1=>version$1===requiredVersion?instance:fallback}exports.makeGetter=makeGetter,exports.API_BACKWARDS_COMPATIBILITY_VERSION=1})),require_logs$3=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.LogsAPI=void 0;let global_utils_1=require_global_utils(),NoopLoggerProvider_1=require_NoopLoggerProvider(),ProxyLoggerProvider_1=require_ProxyLoggerProvider();exports.LogsAPI=class LogsAPI{constructor(){this._proxyLoggerProvider=new ProxyLoggerProvider_1.ProxyLoggerProvider}static getInstance(){return this._instance||=new LogsAPI,this._instance}setGlobalLoggerProvider(provider){return global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]?this.getLoggerProvider():(global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]=(0,global_utils_1.makeGetter)(global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION,provider,NoopLoggerProvider_1.NOOP_LOGGER_PROVIDER),this._proxyLoggerProvider._setDelegate(provider),provider)}getLoggerProvider(){var _a,_b;return global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY]?.call(global_utils_1._global,global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION)??this._proxyLoggerProvider}getLogger(name,version$1,options){return this.getLoggerProvider().getLogger(name,version$1,options)}disable(){delete global_utils_1._global[global_utils_1.GLOBAL_LOGS_API_KEY],this._proxyLoggerProvider=new ProxyLoggerProvider_1.ProxyLoggerProvider}}})),require_src$6=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.logs=exports.ProxyLoggerProvider=exports.NoopLogger=exports.NOOP_LOGGER=exports.SeverityNumber=void 0;var LogRecord_1=require_LogRecord();Object.defineProperty(exports,`SeverityNumber`,{enumerable:!0,get:function(){return LogRecord_1.SeverityNumber}});var NoopLogger_1=require_NoopLogger();Object.defineProperty(exports,`NOOP_LOGGER`,{enumerable:!0,get:function(){return NoopLogger_1.NOOP_LOGGER}}),Object.defineProperty(exports,`NoopLogger`,{enumerable:!0,get:function(){return NoopLogger_1.NoopLogger}});var ProxyLoggerProvider_1=require_ProxyLoggerProvider();Object.defineProperty(exports,`ProxyLoggerProvider`,{enumerable:!0,get:function(){return ProxyLoggerProvider_1.ProxyLoggerProvider}}),exports.logs=require_logs$3().LogsAPI.getInstance()})),require_LogRecordImpl=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.LogRecordImpl=void 0;let api$4=__require(`@opentelemetry/api`),core_1=require_src$8();exports.LogRecordImpl=class{hrTime;hrTimeObserved;spanContext;resource;instrumentationScope;attributes={};_severityText;_severityNumber;_body;_eventName;totalAttributesCount=0;_isReadonly=!1;_logRecordLimits;set severityText(severityText){this._isLogRecordReadonly()||(this._severityText=severityText)}get severityText(){return this._severityText}set severityNumber(severityNumber){this._isLogRecordReadonly()||(this._severityNumber=severityNumber)}get severityNumber(){return this._severityNumber}set body(body){this._isLogRecordReadonly()||(this._body=body)}get body(){return this._body}get eventName(){return this._eventName}set eventName(eventName){this._isLogRecordReadonly()||(this._eventName=eventName)}get droppedAttributesCount(){return this.totalAttributesCount-Object.keys(this.attributes).length}constructor(_sharedState,instrumentationScope,logRecord){let{timestamp,observedTimestamp,eventName,severityNumber,severityText,body,attributes={},context:context$1}=logRecord,now=Date.now();if(this.hrTime=(0,core_1.timeInputToHrTime)(timestamp??now),this.hrTimeObserved=(0,core_1.timeInputToHrTime)(observedTimestamp??now),context$1){let spanContext=api$4.trace.getSpanContext(context$1);spanContext&&api$4.isSpanContextValid(spanContext)&&(this.spanContext=spanContext)}this.severityNumber=severityNumber,this.severityText=severityText,this.body=body,this.resource=_sharedState.resource,this.instrumentationScope=instrumentationScope,this._logRecordLimits=_sharedState.logRecordLimits,this._eventName=eventName,this.setAttributes(attributes)}setAttribute(key,value){return this._isLogRecordReadonly()||value===null?this:key.length===0?(api$4.diag.warn(`Invalid attribute key: ${key}`),this):!(0,core_1.isAttributeValue)(value)&&!(typeof value==`object`&&!Array.isArray(value)&&Object.keys(value).length>0)?(api$4.diag.warn(`Invalid attribute value set for key: ${key}`),this):(this.totalAttributesCount+=1,Object.keys(this.attributes).length>=this._logRecordLimits.attributeCountLimit&&!Object.prototype.hasOwnProperty.call(this.attributes,key)?(this.droppedAttributesCount===1&&api$4.diag.warn(`Dropping extra attributes.`),this):((0,core_1.isAttributeValue)(value)?this.attributes[key]=this._truncateToSize(value):this.attributes[key]=value,this))}setAttributes(attributes){for(let[k,v]of Object.entries(attributes))this.setAttribute(k,v);return this}setBody(body){return this.body=body,this}setEventName(eventName){return this.eventName=eventName,this}setSeverityNumber(severityNumber){return this.severityNumber=severityNumber,this}setSeverityText(severityText){return this.severityText=severityText,this}_makeReadonly(){this._isReadonly=!0}_truncateToSize(value){let limit=this._logRecordLimits.attributeValueLengthLimit;return limit<=0?(api$4.diag.warn(`Attribute value limit must be positive, got ${limit}`),value):typeof value==`string`?this._truncateToLimitUtil(value,limit):Array.isArray(value)?value.map(val=>typeof val==`string`?this._truncateToLimitUtil(val,limit):val):value}_truncateToLimitUtil(value,limit){return value.length<=limit?value:value.substring(0,limit)}_isLogRecordReadonly(){return this._isReadonly&&api$4.diag.warn(`Can not execute the operation on emitted log record`),this._isReadonly}}})),require_Logger=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.Logger=void 0;let api_1$9=__require(`@opentelemetry/api`),LogRecordImpl_1=require_LogRecordImpl();exports.Logger=class{instrumentationScope;_sharedState;constructor(instrumentationScope,_sharedState){this.instrumentationScope=instrumentationScope,this._sharedState=_sharedState}emit(logRecord){let currentContext=logRecord.context||api_1$9.context.active(),logRecordInstance=new LogRecordImpl_1.LogRecordImpl(this._sharedState,this.instrumentationScope,{context:currentContext,...logRecord});this._sharedState.activeProcessor.onEmit(logRecordInstance,currentContext),logRecordInstance._makeReadonly()}}})),require_config$1=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.reconfigureLimits=exports.loadDefaultConfig=void 0;let core_1=require_src$8();function loadDefaultConfig(){return{forceFlushTimeoutMillis:3e4,logRecordLimits:{attributeValueLengthLimit:(0,core_1.getNumberFromEnv)(`OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT`)??1/0,attributeCountLimit:(0,core_1.getNumberFromEnv)(`OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT`)??128},includeTraceContext:!0}}exports.loadDefaultConfig=loadDefaultConfig;function reconfigureLimits(logRecordLimits){return{attributeCountLimit:logRecordLimits.attributeCountLimit??(0,core_1.getNumberFromEnv)(`OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT`)??(0,core_1.getNumberFromEnv)(`OTEL_ATTRIBUTE_COUNT_LIMIT`)??128,attributeValueLengthLimit:logRecordLimits.attributeValueLengthLimit??(0,core_1.getNumberFromEnv)(`OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT`)??(0,core_1.getNumberFromEnv)(`OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT`)??1/0}}exports.reconfigureLimits=reconfigureLimits})),require_NoopLogRecordProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.NoopLogRecordProcessor=void 0,exports.NoopLogRecordProcessor=class{forceFlush(){return Promise.resolve()}onEmit(_logRecord,_context){}shutdown(){return Promise.resolve()}}})),require_MultiLogRecordProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.MultiLogRecordProcessor=void 0;let core_1=require_src$8();exports.MultiLogRecordProcessor=class{processors;forceFlushTimeoutMillis;constructor(processors,forceFlushTimeoutMillis){this.processors=processors,this.forceFlushTimeoutMillis=forceFlushTimeoutMillis}async forceFlush(){let timeout=this.forceFlushTimeoutMillis;await Promise.all(this.processors.map(processor=>(0,core_1.callWithTimeout)(processor.forceFlush(),timeout)))}onEmit(logRecord,context$1){this.processors.forEach(processors=>processors.onEmit(logRecord,context$1))}async shutdown(){await Promise.all(this.processors.map(processor=>processor.shutdown()))}}})),require_LoggerProviderSharedState=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.LoggerProviderSharedState=void 0;let NoopLogRecordProcessor_1=require_NoopLogRecordProcessor(),MultiLogRecordProcessor_1=require_MultiLogRecordProcessor();exports.LoggerProviderSharedState=class{resource;forceFlushTimeoutMillis;logRecordLimits;processors;loggers=new Map;activeProcessor;registeredLogRecordProcessors=[];constructor(resource,forceFlushTimeoutMillis,logRecordLimits,processors){this.resource=resource,this.forceFlushTimeoutMillis=forceFlushTimeoutMillis,this.logRecordLimits=logRecordLimits,this.processors=processors,processors.length>0?(this.registeredLogRecordProcessors=processors,this.activeProcessor=new MultiLogRecordProcessor_1.MultiLogRecordProcessor(this.registeredLogRecordProcessors,this.forceFlushTimeoutMillis)):this.activeProcessor=new NoopLogRecordProcessor_1.NoopLogRecordProcessor}}})),require_LoggerProvider=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.LoggerProvider=exports.DEFAULT_LOGGER_NAME=void 0;let api_1$8=__require(`@opentelemetry/api`),api_logs_1=require_src$6(),resources_1$1=__require(`@opentelemetry/resources`),core_1=require_src$8(),Logger_1=require_Logger(),config_1=require_config$1(),LoggerProviderSharedState_1=require_LoggerProviderSharedState();exports.DEFAULT_LOGGER_NAME=`unknown`,exports.LoggerProvider=class{_shutdownOnce;_sharedState;constructor(config={}){let mergedConfig=(0,core_1.merge)({},(0,config_1.loadDefaultConfig)(),config),resource=config.resource??(0,resources_1$1.defaultResource)();this._sharedState=new LoggerProviderSharedState_1.LoggerProviderSharedState(resource,mergedConfig.forceFlushTimeoutMillis,(0,config_1.reconfigureLimits)(mergedConfig.logRecordLimits),config?.processors??[]),this._shutdownOnce=new core_1.BindOnceFuture(this._shutdown,this)}getLogger(name,version$1,options){if(this._shutdownOnce.isCalled)return api_1$8.diag.warn(`A shutdown LoggerProvider cannot provide a Logger`),api_logs_1.NOOP_LOGGER;name||api_1$8.diag.warn(`Logger requested without instrumentation scope name.`);let loggerName=name||exports.DEFAULT_LOGGER_NAME,key=`${loggerName}@${version$1||``}:${options?.schemaUrl||``}`;return this._sharedState.loggers.has(key)||this._sharedState.loggers.set(key,new Logger_1.Logger({name:loggerName,version:version$1,schemaUrl:options?.schemaUrl},this._sharedState)),this._sharedState.loggers.get(key)}forceFlush(){return this._shutdownOnce.isCalled?(api_1$8.diag.warn(`invalid attempt to force flush after LoggerProvider shutdown`),this._shutdownOnce.promise):this._sharedState.activeProcessor.forceFlush()}shutdown(){return this._shutdownOnce.isCalled?(api_1$8.diag.warn(`shutdown may only be called once per LoggerProvider`),this._shutdownOnce.promise):this._shutdownOnce.call()}_shutdown(){return this._sharedState.activeProcessor.shutdown()}}})),require_ConsoleLogRecordExporter=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.ConsoleLogRecordExporter=void 0;let core_1=require_src$8();exports.ConsoleLogRecordExporter=class{export(logs,resultCallback){this._sendLogRecords(logs,resultCallback)}shutdown(){return Promise.resolve()}_exportInfo(logRecord){return{resource:{attributes:logRecord.resource.attributes},instrumentationScope:logRecord.instrumentationScope,timestamp:(0,core_1.hrTimeToMicroseconds)(logRecord.hrTime),traceId:logRecord.spanContext?.traceId,spanId:logRecord.spanContext?.spanId,traceFlags:logRecord.spanContext?.traceFlags,severityText:logRecord.severityText,severityNumber:logRecord.severityNumber,body:logRecord.body,attributes:logRecord.attributes}}_sendLogRecords(logRecords,done){for(let logRecord of logRecords)console.dir(this._exportInfo(logRecord),{depth:3});done?.({code:core_1.ExportResultCode.SUCCESS})}}})),require_SimpleLogRecordProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.SimpleLogRecordProcessor=void 0;let core_1=require_src$8();exports.SimpleLogRecordProcessor=class{_exporter;_shutdownOnce;_unresolvedExports;constructor(_exporter){this._exporter=_exporter,this._shutdownOnce=new core_1.BindOnceFuture(this._shutdown,this),this._unresolvedExports=new Set}onEmit(logRecord){if(this._shutdownOnce.isCalled)return;let doExport=()=>core_1.internal._export(this._exporter,[logRecord]).then(result=>{result.code!==core_1.ExportResultCode.SUCCESS&&(0,core_1.globalErrorHandler)(result.error??Error(`SimpleLogRecordProcessor: log record export failed (status ${result})`))}).catch(core_1.globalErrorHandler);if(logRecord.resource.asyncAttributesPending){let exportPromise=logRecord.resource.waitForAsyncAttributes?.().then(()=>(this._unresolvedExports.delete(exportPromise),doExport()),core_1.globalErrorHandler);exportPromise!=null&&this._unresolvedExports.add(exportPromise)}else doExport()}async forceFlush(){await Promise.all(Array.from(this._unresolvedExports))}shutdown(){return this._shutdownOnce.call()}_shutdown(){return this._exporter.shutdown()}}})),require_InMemoryLogRecordExporter=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.InMemoryLogRecordExporter=void 0;let core_1=require_src$8();exports.InMemoryLogRecordExporter=class{_finishedLogRecords=[];_stopped=!1;export(logs,resultCallback){if(this._stopped)return resultCallback({code:core_1.ExportResultCode.FAILED,error:Error(`Exporter has been stopped`)});this._finishedLogRecords.push(...logs),resultCallback({code:core_1.ExportResultCode.SUCCESS})}shutdown(){return this._stopped=!0,this.reset(),Promise.resolve()}getFinishedLogRecords(){return this._finishedLogRecords}reset(){this._finishedLogRecords=[]}}})),require_BatchLogRecordProcessorBase=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BatchLogRecordProcessorBase=void 0;let api_1$7=__require(`@opentelemetry/api`),core_1=require_src$8();exports.BatchLogRecordProcessorBase=class{_exporter;_maxExportBatchSize;_maxQueueSize;_scheduledDelayMillis;_exportTimeoutMillis;_isExporting=!1;_finishedLogRecords=[];_timer;_shutdownOnce;constructor(_exporter,config){this._exporter=_exporter,this._maxExportBatchSize=config?.maxExportBatchSize??(0,core_1.getNumberFromEnv)(`OTEL_BLRP_MAX_EXPORT_BATCH_SIZE`)??512,this._maxQueueSize=config?.maxQueueSize??(0,core_1.getNumberFromEnv)(`OTEL_BLRP_MAX_QUEUE_SIZE`)??2048,this._scheduledDelayMillis=config?.scheduledDelayMillis??(0,core_1.getNumberFromEnv)(`OTEL_BLRP_SCHEDULE_DELAY`)??5e3,this._exportTimeoutMillis=config?.exportTimeoutMillis??(0,core_1.getNumberFromEnv)(`OTEL_BLRP_EXPORT_TIMEOUT`)??3e4,this._shutdownOnce=new core_1.BindOnceFuture(this._shutdown,this),this._maxExportBatchSize>this._maxQueueSize&&(api_1$7.diag.warn(`BatchLogRecordProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize`),this._maxExportBatchSize=this._maxQueueSize)}onEmit(logRecord){this._shutdownOnce.isCalled||this._addToBuffer(logRecord)}forceFlush(){return this._shutdownOnce.isCalled?this._shutdownOnce.promise:this._flushAll()}shutdown(){return this._shutdownOnce.call()}async _shutdown(){this.onShutdown(),await this._flushAll(),await this._exporter.shutdown()}_addToBuffer(logRecord){this._finishedLogRecords.length>=this._maxQueueSize||(this._finishedLogRecords.push(logRecord),this._maybeStartTimer())}_flushAll(){return new Promise((resolve,reject)=>{let promises=[],batchCount=Math.ceil(this._finishedLogRecords.length/this._maxExportBatchSize);for(let i=0;i<batchCount;i++)promises.push(this._flushOneBatch());Promise.all(promises).then(()=>{resolve()}).catch(reject)})}_flushOneBatch(){return this._clearTimer(),this._finishedLogRecords.length===0?Promise.resolve():new Promise((resolve,reject)=>{(0,core_1.callWithTimeout)(this._export(this._finishedLogRecords.splice(0,this._maxExportBatchSize)),this._exportTimeoutMillis).then(()=>resolve()).catch(reject)})}_maybeStartTimer(){if(this._isExporting)return;let flush=()=>{this._isExporting=!0,this._flushOneBatch().then(()=>{this._isExporting=!1,this._finishedLogRecords.length>0&&(this._clearTimer(),this._maybeStartTimer())}).catch(e=>{this._isExporting=!1,(0,core_1.globalErrorHandler)(e)})};if(this._finishedLogRecords.length>=this._maxExportBatchSize)return flush();this._timer===void 0&&(this._timer=setTimeout(()=>flush(),this._scheduledDelayMillis),typeof this._timer!=`number`&&this._timer.unref())}_clearTimer(){this._timer!==void 0&&(clearTimeout(this._timer),this._timer=void 0)}_export(logRecords){let doExport=()=>core_1.internal._export(this._exporter,logRecords).then(result=>{result.code!==core_1.ExportResultCode.SUCCESS&&(0,core_1.globalErrorHandler)(result.error??Error(`BatchLogRecordProcessor: log record export failed (status ${result})`))}).catch(core_1.globalErrorHandler),pendingResources=logRecords.map(logRecord=>logRecord.resource).filter(resource=>resource.asyncAttributesPending);return pendingResources.length===0?doExport():Promise.all(pendingResources.map(resource=>resource.waitForAsyncAttributes?.())).then(doExport,core_1.globalErrorHandler)}}})),require_BatchLogRecordProcessor=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BatchLogRecordProcessor=void 0;let BatchLogRecordProcessorBase_1=require_BatchLogRecordProcessorBase();exports.BatchLogRecordProcessor=class extends BatchLogRecordProcessorBase_1.BatchLogRecordProcessorBase{onShutdown(){}}})),require_node$2=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BatchLogRecordProcessor=void 0;var BatchLogRecordProcessor_1=require_BatchLogRecordProcessor();Object.defineProperty(exports,`BatchLogRecordProcessor`,{enumerable:!0,get:function(){return BatchLogRecordProcessor_1.BatchLogRecordProcessor}})})),require_platform$2=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BatchLogRecordProcessor=void 0;var node_1=require_node$2();Object.defineProperty(exports,`BatchLogRecordProcessor`,{enumerable:!0,get:function(){return node_1.BatchLogRecordProcessor}})})),require_src$5=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.BatchLogRecordProcessor=exports.InMemoryLogRecordExporter=exports.SimpleLogRecordProcessor=exports.ConsoleLogRecordExporter=exports.LoggerProvider=void 0;var LoggerProvider_1=require_LoggerProvider();Object.defineProperty(exports,`LoggerProvider`,{enumerable:!0,get:function(){return LoggerProvider_1.LoggerProvider}});var ConsoleLogRecordExporter_1=require_ConsoleLogRecordExporter();Object.defineProperty(exports,`ConsoleLogRecordExporter`,{enumerable:!0,get:function(){return ConsoleLogRecordExporter_1.ConsoleLogRecordExporter}});var SimpleLogRecordProcessor_1=require_SimpleLogRecordProcessor();Object.defineProperty(exports,`SimpleLogRecordProcessor`,{enumerable:!0,get:function(){return SimpleLogRecordProcessor_1.SimpleLogRecordProcessor}});var InMemoryLogRecordExporter_1=require_InMemoryLogRecordExporter();Object.defineProperty(exports,`InMemoryLogRecordExporter`,{enumerable:!0,get:function(){return InMemoryLogRecordExporter_1.InMemoryLogRecordExporter}});var platform_1=require_platform$2();Object.defineProperty(exports,`BatchLogRecordProcessor`,{enumerable:!0,get:function(){return platform_1.BatchLogRecordProcessor}})})),require_logs$2=__commonJSMin((exports=>{Object.defineProperty(exports,`__esModule`,{value:!0}),exports.DBOSConsoleLogger=exports.DBOSContextualLogger=exports.GlobalLogger=void 0;let utils_1=require_utils$3();var SeverityNumber;(function(SeverityNumber){SeverityNumber[SeverityNumber.UNSPECIFIED=0]=`UNSPECIFIED`,SeverityNumber[SeverityNumber.TRACE=1]=`TRACE`,SeverityNumber[SeverityNumber.TRACE2=2]=`TRACE2`,SeverityNumber[SeverityNumber.TRACE3=3]=`TRACE3`,SeverityNumber[SeverityNumber.TRACE4=4]=`TRACE4`,SeverityNumber[SeverityNumber.DEBUG=5]=`DEBUG`,SeverityNumber[SeverityNumber.DEBUG2=6]=`DEBUG2`,SeverityNumber[SeverityNumber.DEBUG3=7]=`DEBUG3`,SeverityNumber[SeverityNumber.DEBUG4=8]=`DEBUG4`,SeverityNumber[SeverityNumber.INFO=9]=`INFO`,SeverityNumber[SeverityNumber.INFO2=10]=`INFO2`,SeverityNumber[SeverityNumber.INFO3=11]=`INFO3`,SeverityNumber[SeverityNumber.INFO4=12]=`INFO4`,SeverityNumber[SeverityNumber.WARN=13]=`WARN`,SeverityNumber[SeverityNumber.WARN2=14]=`WARN2`,SeverityNumber[SeverityNumber.WARN3=15]=`WARN3`,SeverityNumber[SeverityNumber.WARN4=16]=`WARN4`,SeverityNumber[SeverityNumber.ERROR=17]=`ERROR`,SeverityNumber[SeverityNumber.ERROR2=18]=`ERROR2`,SeverityNumber[SeverityNumber.ERROR3=19]=`ERROR3`,SeverityNumber[SeverityNumber.ERROR4=20]=`ERROR4`,SeverityNumber[SeverityNumber.FATAL=21]=`FATAL`,SeverityNumber[SeverityNumber.FATAL2=22]=`FATAL2`,SeverityNumber[SeverityNumber.FATAL3=23]=`FATAL3`,SeverityNumber[SeverityNumber.FATAL4=24]=`FATAL4`})(SeverityNumber||={}),exports.GlobalLogger=class{telemetryCollector;logger;addContextMetadata;isLogging=!1;constructor(telemetryCollector,config,appName=`dbos`){if(this.telemetryCollector=telemetryCollector,this.addContextMetadata=config?.addContextMetadata||!1,!utils_1.globalParams.enableOTLP){this.logger=new DBOSConsoleLogger(config??{});return}let TransportStream=__require(`winston-transport`);class OTLPLogQueueTransport extends TransportStream{telemetryCollector;name=`OTLPLogQueueTransport`;otelLogger;applicationID;executorID;constructor(telemetryCollector$1,logLevel){super(),this.telemetryCollector=telemetryCollector$1,this.level=logLevel;let{LoggerProvider}=require_src$5(),logRecordProcessor={forceFlush:async()=>{},onEmit(logRecord){telemetryCollector$1.push(logRecord)},shutdown:async()=>{}};this.otelLogger=new LoggerProvider({resource:{attributes:{"service.name":appName}},processors:[logRecordProcessor]}).getLogger(`dbos-logger`),this.applicationID=utils_1.globalParams.appID,this.executorID=utils_1.globalParams.executorID}log(info,callback){let{level,message,stack,span}=info,levelToSeverityNumber={error:SeverityNumber.ERROR,warn:SeverityNumber.WARN,info:SeverityNumber.INFO,debug:SeverityNumber.DEBUG};this.otelLogger.emit({severityNumber:levelToSeverityNumber[level],severityText:level,body:message,timestamp:performance.now(),observedTimestamp:performance.now(),attributes:{...span?.attributes,traceId:span?.spanContext()?.traceId,spanId:span?.spanContext()?.spanId,stack,applicationID:this.applicationID,applicationVersion:utils_1.globalParams.appVersion,executorID:this.executorID}}),callback()}}let{transports,createLogger}=__require(`winston`),winstonTransports=[];winstonTransports.push(new transports.Console({format:getConsoleFormat(),level:config?.logLevel||`info`,silent:config?.silent||!1,forceConsole:config?.forceConsole||!1}));let otlpTransport;utils_1.globalParams.enableOTLP&&this.telemetryCollector?.exporter&&(otlpTransport=new OTLPLogQueueTransport(this.telemetryCollector,config?.logLevel||`info`),winstonTransports.push(otlpTransport)),this.logger=createLogger({transports:winstonTransports}),utils_1.globalParams.enableOTLP&&process.env.DBOS__CAPTURE_STD!==`false`&&this.telemetryCollector?.exporter&&(0,utils_1.interceptStreams)((msg,stream)=>{stream===`stdout`?this.isLogging||otlpTransport?.log({level:`info`,message:msg.trim()},()=>{}):this.isLogging||otlpTransport?.log({level:`error`,message:msg.trim(),stack:Error().stack},()=>{})})}info(logEntry,metadata){this.isLogging=!0,typeof logEntry==`string`?this.logger.info(logEntry,metadata):this.logger.info(utils_1.DBOSJSON.stringify(logEntry),metadata),this.isLogging=!1}debug(logEntry,metadata){this.isLogging=!0,typeof logEntry==`string`?this.logger.debug(logEntry,metadata):this.logger.debug(utils_1.DBOSJSON.stringify(logEntry),metadata),this.isLogging=!1}warn(logEntry,metadata){this.isLogging=!0,typeof logEntry==`string`?this.logger.warn(logEntry,metadata):this.logger.warn(utils_1.DBOSJSON.stringify(logEntry),metadata),this.isLogging=!1}error(inputError,metadata){this.isLogging=!0,inputError instanceof Error?this.logger.error(inputError.message,{...metadata,stack:inputError.stack}):typeof inputError==`string`?this.logger.error(inputError,{...metadata,stack:Error().stack}):this.logger.error(utils_1.DBOSJSON.stringify(inputError),{...metadata,stack:Error().stack}),this.isLogging=!1}async destroy(){await this.telemetryCollector?.destroy()}},exports.DBOSContextualLogger=class{globalLogger;ctx;includeContextMetadata;constructor(globalLogger,ctx){this.globalLogger=globalLogger,this.ctx=ctx,this.includeContextMetadata=this.globalLogger.addContextMetadata}info(logEntry,metadata){this.globalLogger.info(logEntry,{includeContextMetadata:this.includeContextMetadata,span:this.ctx(),...metadata})}debug(logEntry,metadata){this.globalLogger.debug(logEntry,{includeContextMetadata:this.includeContextMetadata,span:this.ctx(),...metadata})}warn(logEntry,metadata){this.globalLogger.warn(logEntry,{includeContextMetadata:this.includeContextMetadata,span:this.ctx(),...metadata})}error(inputError,metadata){this.globalLogger.error(inputError,{includeContextMetadata:this.includeContextMetadata,span:this.ctx(),...metadata})}};var DBOSConsoleLogger=class{config;constructor(config){this.config=config}info(logEntry,_metadata){console.log(logEntry)}debug(logEntry,_metadata){this.config.logLevel===`debug`&&console.debug(logEntry)}warn(logEntry,_metadata){console.warn(logEntry)}error(inputError,metadata){inputError instanceof Error?console.error(inputError):metadata?.stack?console.error(inputError,`
|
|
4
4
|
`,metadata.stack):console.error(inputError)}};exports.DBOSConsoleLogger=DBOSConsoleLogger;function getConsoleFormat(){let{format}=__require(`winston`);return format.combine(format.errors({stack:!0}),format.timestamp(),format.colorize(),format.printf(info=>{let{timestamp,level,message,stack}=info,applicationVersion=utils_1.globalParams.appVersion,ts=typeof timestamp==`string`?timestamp.slice(0,19).replace(`T`,` `):void 0,formattedStack=typeof stack==`string`?stack?.split(`
|
|
5
5
|
`).slice(1).join(`
|
|
@@ -335,7 +335,7 @@ export default async function seed(container: AppOS.Container) {}
|
|
|
335
335
|
`;async function exists(filePath){try{return await fs$1.access(filePath),!0}catch{return!1}}async function findLatestSnapshot(migrationsFolder){if(!await exists(migrationsFolder))return null;let migrationDirs=(await fs$1.readdir(migrationsFolder,{withFileTypes:!0})).filter(e=>e.isDirectory()&&/^\d{14}_/.test(e.name)).map(e=>e.name).sort().reverse();if(migrationDirs.length===0)return null;let snapshotPath=path.join(migrationsFolder,migrationDirs[0],`snapshot.json`);if(!await exists(snapshotPath))return null;let content=await fs$1.readFile(snapshotPath,`utf-8`);return JSON.parse(content)}async function ensureDatabaseScaffolding(dbName){let dbFolder=path.join(process.cwd(),APPOS_DIR,DATABASES_DIR,dbName);await exists(dbFolder)||await fs$1.mkdir(dbFolder,{recursive:!0});let schemaPath=path.join(dbFolder,`schema.ts`);await exists(schemaPath)||await fs$1.writeFile(schemaPath,SCHEMA_TEMPLATE(dbName));let relationsPath=path.join(dbFolder,`relations.ts`);await exists(relationsPath)||await fs$1.writeFile(relationsPath,RELATIONS_TEMPLATE(dbName));let seedPath=path.join(dbFolder,`seed.ts`);await exists(seedPath)||await fs$1.writeFile(seedPath,SEED_TEMPLATE(dbName));let schemaMigrationsFolder=path.join(dbFolder,`schema-migrations`);await exists(schemaMigrationsFolder)||await fs$1.mkdir(schemaMigrationsFolder,{recursive:!0});let dataMigrationsFolder=path.join(dbFolder,`data-migrations`);await exists(dataMigrationsFolder)||await fs$1.mkdir(dataMigrationsFolder,{recursive:!0})}async function generateDataMigrations(opts){let{ctx}=opts,{container}=ctx,databaseNames=Object.keys(container.db);if(ctx.info(`Generating data migration`),databaseNames.length===0){ctx.info(`No databases available`);return}let selectedDb=await ctx.choice({message:`Select database`,options:databaseNames.map(name=>({value:name,label:name}))});ctx.isCancel(selectedDb)&&ctx.cancel();let dbName=selectedDb;await ensureDatabaseScaffolding(dbName);let{migrationsFolder}=defineMigrationOpts(dbName,`data`),migrationFile=await ctx.task(dbName,async()=>{let migrationTag=`${new Date().toISOString().replace(/[-:T]/g,``).slice(0,14)}_${generateMigrationName()}`,migrationFolder=path.join(migrationsFolder,migrationTag);await fs$1.mkdir(migrationFolder,{recursive:!0});let file=path.join(migrationFolder,`migration.sql`);return await fs$1.writeFile(file,`-- Write your data migration SQL here
|
|
336
336
|
`),file});ctx.success(migrationFile)}async function generateMigrations(opts){let{ctx,migrationType}=opts,{container}=ctx;if(migrationType===`data`){await generateDataMigrations(opts);return}let databaseNames=Object.keys(container.db);if(ctx.info(`Generating ${migrationType} migrations`),databaseNames.length===0){ctx.info(`Nothing to generate`);return}for(let name of databaseNames)await ensureDatabaseScaffolding(name);let createdAny=!1;for(let name of databaseNames){let schemaPath=path.join(process.cwd(),APPOS_DIR,DATABASES_DIR,name,`schema.ts`),{migrationsFolder}=defineMigrationOpts(name,migrationType);try{let schemaModule=await import(schemaPath),schema=schemaModule.default||schemaModule,prevJson=await findLatestSnapshot(migrationsFolder)??await generateDrizzleJson({}),currentJson=await generateDrizzleJson(schema),migrationStatements=await generateMigration(prevJson,currentJson);if(!migrationStatements||migrationStatements.length===0){ctx.taskStatus(name,`no changes`);continue}let migrationFile=await ctx.task(name,async()=>{let migrationTag=`${new Date().toISOString().replace(/[-:T]/g,``).slice(0,14)}_${generateMigrationName()}`,migrationFolder=path.join(migrationsFolder,migrationTag);await fs$1.mkdir(migrationFolder,{recursive:!0});let sqlContent=`${migrationStatements.join(`;
|
|
337
337
|
|
|
338
|
-
`)};`,file=path.join(migrationFolder,`migration.sql`),snapshotFile=path.join(migrationFolder,`snapshot.json`);return await fs$1.writeFile(file,sqlContent),await fs$1.writeFile(snapshotFile,JSON.stringify(currentJson,null,2)),file});ctx.success(migrationFile),createdAny=!0}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}}createdAny||ctx.info(`Nothing to generate`)}async function runMigrations(opts){let{ctx,migrationType}=opts,{container}=ctx,databaseNames=Object.keys(container.db),originalLogLevel=container.logger.level;container.logger.level=`silent`,migrationType===`schema`&&await(0,import_system_database.ensureSystemDatabase)(container.worker.dbUrl,container.logger);let hasAnyMigrations=(await Promise.all(databaseNames.map(async name=>{let{migrationsFolder}=defineMigrationOpts(name,migrationType);return exists(migrationsFolder)}))).some(Boolean);if(databaseNames.length===0||!hasAnyMigrations){ctx.info(`Nothing to migrate`),container.logger.level=originalLogLevel;return}for(let name of databaseNames){let db=container.db[name],migrationOpts=defineMigrationOpts(name,migrationType);if(await exists(migrationOpts.migrationsFolder))try{await ctx.task(name,async()=>{await migrate(db,migrationOpts)})}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}}container.logger.level=originalLogLevel}async function runSeeds(opts){let{ctx}=opts,{container}=ctx,databaseNames=Object.keys(container.db);if(databaseNames.length===0){ctx.info(`Nothing to seed`);return}for(let name of databaseNames)await ensureDatabaseScaffolding(name);for(let name of databaseNames){let seedPath=path.join(process.cwd(),APPOS_DIR,DATABASES_DIR,name,`seed.ts`);try{await ctx.task(name,async()=>{let seedModule=await import(seedPath),seedFn=seedModule.default||seedModule.seed;if(typeof seedFn!=`function`)throw Error(`seed file does not export a function`);await seedFn(container)})}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}}}var gen_default$1=defineCommand({description:`Generate database data migrations`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:data:gen`),await generateMigrations({ctx,migrationType:`data`}),await ctx.cleanup(),ctx.outro()}}),migrate_default$1=defineCommand({description:`Run pending database data migrations`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:data:migrate`),await runMigrations({ctx,migrationType:`data`}),await ctx.cleanup(),ctx.outro()}}),gen_default=defineCommand({description:`Generate database schema migrations from schema changes`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:schema:gen`),await generateMigrations({ctx,migrationType:`schema`}),await ctx.cleanup(),ctx.outro()}}),migrate_default=defineCommand({description:`Run pending database schema migrations`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:schema:migrate`),await runMigrations({ctx,migrationType:`schema`}),await ctx.cleanup(),ctx.outro()}}),seed_default=defineCommand({description:`Seed databases with initial data`,args:z.tuple([]),opts:z.object({}),async run(ctx){await runSeeds({ctx}),await ctx.cleanup()}}),down_default=defineCommand({description:`Teardown the infrastructure`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`down`);try{await ctx.spinner(`Stopping containers`,()=>ctx.exec(`docker`,[`compose`,`--profile=infra`,`down`,`--remove-orphans`,`--timeout=0`]))}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}ctx.outro()}}),preview_default=defineCommand({description:`Preview the application`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`preview`),ctx.step(`Starting containers (Ctrl+C to stop)`);let proc=spawn(`docker`,[`compose`,`--profile=app`,`up`,`--build`],{stdio:`inherit`,cwd:process.cwd()}),isShuttingDown=!1,cleanup=async()=>{if(!isShuttingDown){isShuttingDown=!0,proc.kill(`SIGTERM`),ctx.step(`Stopping containers`);try{await ctx.exec(`docker`,[`compose`,`--profile=app`,`down`,`--remove-orphans`,`--timeout=0`])}catch{}process.exit(0)}};process.on(`SIGINT`,cleanup),process.on(`SIGTERM`,cleanup),proc.on(`close`,()=>{isShuttingDown||cleanup()}),await new Promise(()=>{})}}),version=`0.2.
|
|
338
|
+
`)};`,file=path.join(migrationFolder,`migration.sql`),snapshotFile=path.join(migrationFolder,`snapshot.json`);return await fs$1.writeFile(file,sqlContent),await fs$1.writeFile(snapshotFile,JSON.stringify(currentJson,null,2)),file});ctx.success(migrationFile),createdAny=!0}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}}createdAny||ctx.info(`Nothing to generate`)}async function runMigrations(opts){let{ctx,migrationType}=opts,{container}=ctx,databaseNames=Object.keys(container.db),originalLogLevel=container.logger.level;container.logger.level=`silent`,migrationType===`schema`&&await(0,import_system_database.ensureSystemDatabase)(container.worker.dbUrl,container.logger);let hasAnyMigrations=(await Promise.all(databaseNames.map(async name=>{let{migrationsFolder}=defineMigrationOpts(name,migrationType);return exists(migrationsFolder)}))).some(Boolean);if(databaseNames.length===0||!hasAnyMigrations){ctx.info(`Nothing to migrate`),container.logger.level=originalLogLevel;return}for(let name of databaseNames){let db=container.db[name],migrationOpts=defineMigrationOpts(name,migrationType);if(await exists(migrationOpts.migrationsFolder))try{await ctx.task(name,async()=>{await migrate(db,migrationOpts)})}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}}container.logger.level=originalLogLevel}async function runSeeds(opts){let{ctx}=opts,{container}=ctx,databaseNames=Object.keys(container.db);if(databaseNames.length===0){ctx.info(`Nothing to seed`);return}for(let name of databaseNames)await ensureDatabaseScaffolding(name);for(let name of databaseNames){let seedPath=path.join(process.cwd(),APPOS_DIR,DATABASES_DIR,name,`seed.ts`);try{await ctx.task(name,async()=>{let seedModule=await import(seedPath),seedFn=seedModule.default||seedModule.seed;if(typeof seedFn!=`function`)throw Error(`seed file does not export a function`);await seedFn(container)})}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}}}var gen_default$1=defineCommand({description:`Generate database data migrations`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:data:gen`),await generateMigrations({ctx,migrationType:`data`}),await ctx.cleanup(),ctx.outro()}}),migrate_default$1=defineCommand({description:`Run pending database data migrations`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:data:migrate`),await runMigrations({ctx,migrationType:`data`}),await ctx.cleanup(),ctx.outro()}}),gen_default=defineCommand({description:`Generate database schema migrations from schema changes`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:schema:gen`),await generateMigrations({ctx,migrationType:`schema`}),await ctx.cleanup(),ctx.outro()}}),migrate_default=defineCommand({description:`Run pending database schema migrations`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`db:schema:migrate`),await runMigrations({ctx,migrationType:`schema`}),await ctx.cleanup(),ctx.outro()}}),seed_default=defineCommand({description:`Seed databases with initial data`,args:z.tuple([]),opts:z.object({}),async run(ctx){await runSeeds({ctx}),await ctx.cleanup()}}),down_default=defineCommand({description:`Teardown the infrastructure`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`down`);try{await ctx.spinner(`Stopping containers`,()=>ctx.exec(`docker`,[`compose`,`--profile=infra`,`down`,`--remove-orphans`,`--timeout=0`]))}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}ctx.outro()}}),preview_default=defineCommand({description:`Preview the application`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`preview`),ctx.step(`Starting containers (Ctrl+C to stop)`);let proc=spawn(`docker`,[`compose`,`--profile=app`,`up`,`--build`],{stdio:`inherit`,cwd:process.cwd()}),isShuttingDown=!1,cleanup=async()=>{if(!isShuttingDown){isShuttingDown=!0,proc.kill(`SIGTERM`),ctx.step(`Stopping containers`);try{await ctx.exec(`docker`,[`compose`,`--profile=app`,`down`,`--remove-orphans`,`--timeout=0`])}catch{}process.exit(0)}};process.on(`SIGINT`,cleanup),process.on(`SIGTERM`,cleanup),proc.on(`close`,()=>{isShuttingDown||cleanup()}),await new Promise(()=>{})}}),version=`0.2.3-0`;const runtimeInfo$1=`(AppOS v${version} | Node ${process.version})`;var repl_default=defineCommand({description:`Start an interactive REPL with container access`,aliases:[`r`],args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`repl`);let{container}=ctx,available=[],dbNames=Object.keys(container.db);dbNames.length>0&&available.push(`container.db.{${dbNames.join(`, `)}}`);let cacheNames=Object.keys(container.cache);cacheNames.length>0&&available.push(`container.cache.{${cacheNames.join(`, `)}}`);let otherKeys=Object.keys(container).filter(k=>k!==`db`&&k!==`cache`).map(k=>`container.${k}`);available.push(...otherKeys),ctx.info(`Starting REPL ${runtimeInfo$1}`),ctx.info(`Available: ${available.join(`, `)}`),ctx.line(``);let replServer=repl.start({prompt:`appos(${container.config.APP_NAME})> `,useColors:!0,useGlobal:!0,breakEvalOnSigint:!0});replServer.context.container=container,replServer.on(`exit`,async()=>{await ctx.cleanup(),ctx.info(`Bye`),process.exit(0)}),await new Promise(()=>{})}}),reset_default=defineCommand({description:`Reset the infrastructure`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`reset`);try{await ctx.spinner(`Stopping containers`,()=>ctx.exec(`docker`,[`compose`,`--profile=infra`,`down`,`--remove-orphans`,`--timeout=0`]))}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}try{await ctx.spinner(`Starting containers`,()=>ctx.exec(`docker`,[`compose`,`--profile=infra`,`up`,`--wait`]))}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}ctx.step(`Running schema migrations`),await runMigrations({ctx,migrationType:`schema`}),ctx.step(`Seeding databases`),await runSeeds({ctx}),await ctx.cleanup(),ctx.outro()}});const scripts={increment:`
|
|
339
339
|
local windowMs = tonumber(ARGV[2])
|
|
340
340
|
local resetOnChange = ARGV[1] == "1"
|
|
341
341
|
|
|
@@ -359,4 +359,4 @@ export default async function seed(container: AppOS.Container) {}
|
|
|
359
359
|
local timeToExpire = redis.call("PTTL", KEYS[1])
|
|
360
360
|
|
|
361
361
|
return { totalHits, timeToExpire }
|
|
362
|
-
`.replaceAll(/^\s+/gm,``).trim()},toInt=input=>typeof input==`number`?input:Number.parseInt((input??``).toString(),10),parseScriptResponse=results=>{if(!Array.isArray(results))throw TypeError(`Expected result to be array of values`);if(results.length!==2)throw Error(`Expected 2 replies, got ${results.length}`);let totalHits=results[0]===!1?0:toInt(results[0]),timeToExpire=toInt(results[1]);return{totalHits,resetTime:new Date(Date.now()+timeToExpire)}};var RedisStore=class{sendCommand;prefix;resetExpiryOnChange;incrementScriptSha;getScriptSha;windowMs;constructor(options){if(typeof options!=`object`)throw TypeError(`rate-limit-redis: Error: options object is required`);if(`sendCommand`in options&&!(`sendCommandCluster`in options)){let sendCommandFn=options.sendCommand.bind(this);this.sendCommand=async({command})=>sendCommandFn(...command)}else if(!(`sendCommand`in options)&&`sendCommandCluster`in options)this.sendCommand=options.sendCommandCluster.bind(this);else throw Error(`rate-limit-redis: Error: options must include either sendCommand or sendCommandCluster (but not both)`);this.prefix=options.prefix??`rl:`,this.resetExpiryOnChange=options.resetExpiryOnChange??!1,this.incrementScriptSha=this.loadIncrementScript(),this.getScriptSha=this.loadGetScript()}async loadIncrementScript(key){let result=await this.sendCommand({key,isReadOnly:!1,command:[`SCRIPT`,`LOAD`,scripts.increment]});if(typeof result!=`string`)throw TypeError(`unexpected reply from redis client`);return result}async loadGetScript(key){let result=await this.sendCommand({key,isReadOnly:!1,command:[`SCRIPT`,`LOAD`,scripts.get]});if(typeof result!=`string`)throw TypeError(`unexpected reply from redis client`);return result}async retryableIncrement(_key){let key=this.prefixKey(_key),evalCommand=async()=>this.sendCommand({key,isReadOnly:!1,command:[`EVALSHA`,await this.incrementScriptSha,`1`,key,this.resetExpiryOnChange?`1`:`0`,this.windowMs.toString()]});try{return await evalCommand()}catch{return this.incrementScriptSha=this.loadIncrementScript(key),evalCommand()}}prefixKey(key){return`${this.prefix}${key}`}init(options){this.windowMs=options.windowMs}async get(_key){let key=this.prefixKey(_key),results,evalCommand=async()=>this.sendCommand({key,isReadOnly:!0,command:[`EVALSHA`,await this.getScriptSha,`1`,key]});try{results=await evalCommand()}catch{this.getScriptSha=this.loadGetScript(key),results=await evalCommand()}return parseScriptResponse(results)}async increment(key){return parseScriptResponse(await this.retryableIncrement(key))}async decrement(_key){let key=this.prefixKey(_key);await this.sendCommand({key,isReadOnly:!1,command:[`DECR`,key]})}async resetKey(_key){let key=this.prefixKey(_key);await this.sendCommand({key,isReadOnly:!1,command:[`DEL`,key]})}};function getErrorStatus(error){if(error&&typeof error==`object`&&`status`in error){let status=error.status;if(typeof status==`number`)return status}return error instanceof SyntaxError?400:500}function defineErrorHandlerMiddleware(logger){return(error,req,res,next)=>{let userAgent=req.headers[`user-agent`];if(logger.error({error:error.message,stack:error.stack,url:req.url,method:req.method,userAgent:typeof userAgent==`string`?userAgent:userAgent?.[0],ip:req.ip},`Unhandled request error`),res.headersSent)return next(error);let isDevelopment=process.env.NODE_ENV!==`production`;res.status(getErrorStatus(error)).json({error:`Internal server error`,...isDevelopment&&{message:error.message,stack:error.stack}})}}function defineHealthMiddleware(path$2=`/health`){return(req,res,next)=>{if(req.path!==path$2)return next();res.status(200).json({status:`healthy`,timestamp:new Date().toISOString(),uptime:process.uptime()})}}function defineI18nMiddleware(i18n){return(req,res,next)=>{let acceptLanguage=req.headers[`accept-language`],detectedLng=`en`;if(acceptLanguage){let parsed=acceptLanguage.split(`,`)[0].split(`;`)[0].trim();parsed&&parsed.length>0&&(detectedLng=parsed)}req.dir=i18n.dir(detectedLng),req.language=detectedLng,req.languages=i18n.languages,req.t=i18n.getFixedT(detectedLng),next()}}var instrumentation_exports={};import*as import__opentelemetry_api from"@opentelemetry/api";__reExport(instrumentation_exports,import__opentelemetry_api),register(`@opentelemetry/instrumentation/hook.mjs`,import.meta.url);const service={name:process.env.APP_NAME||`appos`,version:process.env.APP_VERSION||`development`};new NodeSDK({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:service.name,[ATTR_SERVICE_VERSION]:service.version}),spanProcessors:[new BatchSpanProcessor(new OTLPTraceExporter({url:process.env.OTEL_EXPORTER_OTLP_ENDPOINT||`http://localhost:4318/v1/traces`,headers:process.env.OTEL_EXPORTER_OTLP_HEADERS?JSON.parse(process.env.OTEL_EXPORTER_OTLP_HEADERS):void 0}))],instrumentations:[getNodeAutoInstrumentations({"@opentelemetry/instrumentation-fs":{enabled:!1},"@opentelemetry/instrumentation-dns":{enabled:!1}}),new PinoInstrumentation({logHook:(_span,record)=>{record[`service.name`]=service.name}})]}).start();const CF_COUNTRY_HEADER=`cf-ipcountry`;function extractRequestMetadata(req,config){config?.injectCountry&&!req.headers[CF_COUNTRY_HEADER]&&(req.headers[CF_COUNTRY_HEADER]=config.injectCountry);let forwardedFor=req.headers[`x-forwarded-for`],ipAddress;ipAddress=typeof forwardedFor==`string`?forwardedFor.split(`,`)[0].trim():Array.isArray(forwardedFor)&&forwardedFor.length>0?forwardedFor[0].split(`,`)[0].trim():req.socket.remoteAddress||``;let userAgent=req.headers[`user-agent`]||``,country=req.headers[CF_COUNTRY_HEADER]||``;return{ipAddress,userAgent,country}}function defineRequestLoggerMiddleware(logger,config){let tracer;try{tracer=instrumentation_exports.trace.getTracer(`request-logger`)}catch(error){logger.warn({error},`Failed to initialize OpenTelemetry tracer`),tracer=null}return(req,res,next)=>{let metadata=extractRequestMetadata(req,config);req.metadata=metadata;let startTime=Date.now(),span=null,requestId;if(tracer)try{span=tracer.startSpan(`${req.method} ${req.path}`,{kind:instrumentation_exports.SpanKind.SERVER,attributes:{"http.method":req.method,"http.url":req.url,"http.target":req.path,"http.host":(typeof req.headers.host==`string`?req.headers.host:req.headers[`:authority`])||`unknown`,"http.scheme":req.protocol,"http.user_agent":metadata.userAgent||`unknown`,"http.client_ip":metadata.ipAddress,"http.client_country":metadata.country}}),requestId=span.spanContext().traceId}catch(error){logger.warn({error},`Failed to create OpenTelemetry span`),span=null,requestId=crypto.randomUUID()}else logger.info(`OpenTelemetry tracer not available, skipping span creation`),span=null,requestId=crypto.randomUUID();let ctx=span?instrumentation_exports.trace.setSpan(instrumentation_exports.context.active(),span):instrumentation_exports.context.active(),skipLogging=(path$2=>path$2.startsWith(`/@`)||path$2.startsWith(`/node_modules/`)||path$2.startsWith(`/assets/`)||path$2.startsWith(`/public/`)||path$2.match(/\.(js|css|ico|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot|map)$/)||path$2.includes(`/locales/`)||path$2.endsWith(`.ts`)||path$2.endsWith(`.tsx`)||path$2.endsWith(`.json`))(req.path);res.setHeader(`X-Request-Id`,requestId),req.requestId=requestId,res.on(`finish`,()=>{let duration=Date.now()-startTime;if(span)try{span.setAttributes({"http.status_code":res.statusCode,"http.response_content_length":res.get(`content-length`)||0}),res.statusCode>=400?span.setStatus({code:instrumentation_exports.SpanStatusCode.ERROR,message:`HTTP ${res.statusCode}`}):span.setStatus({code:instrumentation_exports.SpanStatusCode.OK}),span.end()}catch(error){logger.warn({error},`Failed to update OpenTelemetry span`)}skipLogging||instrumentation_exports.context.with(ctx,()=>{logger.info({requestId,method:req.method,url:req.path,status:res.statusCode,duration:`${duration}ms`},`Request completed`)})}),res.on(`close`,()=>{if(!(res.writableEnded||res.finished)){let duration=Date.now()-startTime;if(span)try{span.setStatus({code:instrumentation_exports.SpanStatusCode.ERROR,message:`Request closed unexpectedly`}),span.end()}catch(error){logger.warn({error},`Failed to update OpenTelemetry span`)}skipLogging||instrumentation_exports.context.with(ctx,()=>{logger.warn({requestId,method:req.method,url:req.path,duration:`${duration}ms`},`Request closed unexpectedly`)})}});let originalNext=next;next=error=>{if(error){let duration=Date.now()-startTime;if(span)try{span.recordException(error),span.setStatus({code:instrumentation_exports.SpanStatusCode.ERROR,message:error instanceof Error?error.message:String(error)}),span.end()}catch(spanError){logger.warn({error:spanError},`Failed to record exception in span`)}skipLogging||instrumentation_exports.context.with(ctx,()=>{logger.error({requestId,method:req.method,url:req.path,status:res.statusCode||500,duration:`${duration}ms`,error:error instanceof Error?error.message:String(error)},`Request failed`)})}originalNext(error)},instrumentation_exports.context.with(ctx,()=>next())}}function defineShutdownMiddleware(logger,isShuttingDown){return(req,res,next)=>{if(isShuttingDown()){logger.info({url:req.url,method:req.method},`Rejecting request during shutdown`),res.status(503).set(`Connection`,`close`).json({error:`Server is shutting down`});return}next()}}function defineTimeoutMiddleware(logger,timeoutMs=3e4){return(req,res,next)=>{let timeoutFired=!1,timeoutId=setTimeout(()=>{timeoutFired=!0,logger.warn({url:req.url,method:req.method,timeout:timeoutMs},`Request timeout`),res.headersSent||res.status(408).json({error:`Request timeout`}),res.removeListener(`finish`,clearTimeoutHandler),res.removeListener(`close`,clearTimeoutHandler)},timeoutMs),clearTimeoutHandler=()=>{timeoutFired||clearTimeout(timeoutId)};res.on(`finish`,clearTimeoutHandler),res.on(`close`,clearTimeoutHandler),next()}}const SPLIT_LOWER_UPPER_RE=/([\p{Ll}\d])(\p{Lu})/gu,SPLIT_UPPER_UPPER_RE=/(\p{Lu})([\p{Lu}][\p{Ll}])/gu,SPLIT_SEPARATE_NUMBER_RE=/(\d)\p{Ll}|(\p{L})\d/u,DEFAULT_STRIP_REGEXP=/[^\p{L}\d]+/giu,SPLIT_REPLACE_VALUE=`$1\0$2`,DEFAULT_PREFIX_SUFFIX_CHARACTERS=``;function split(value){let result=value.trim();result=result.replace(SPLIT_LOWER_UPPER_RE,SPLIT_REPLACE_VALUE).replace(SPLIT_UPPER_UPPER_RE,SPLIT_REPLACE_VALUE),result=result.replace(DEFAULT_STRIP_REGEXP,`\0`);let start=0,end=result.length;for(;result.charAt(start)===`\0`;)start++;if(start===end)return[];for(;result.charAt(end-1)===`\0`;)end--;return result.slice(start,end).split(/\0/g)}function splitSeparateNumbers(value){let words=split(value);for(let i=0;i<words.length;i++){let word=words[i],match=SPLIT_SEPARATE_NUMBER_RE.exec(word);if(match){let offset=match.index+(match[1]??match[2]).length;words.splice(i,1,word.slice(0,offset),word.slice(offset))}}return words}function camelCase(input,options){let[prefix,words,suffix]=splitPrefixSuffix(input,options),lower=lowerFactory(options?.locale),upper=upperFactory(options?.locale),transform=options?.mergeAmbiguousCharacters?capitalCaseTransformFactory(lower,upper):pascalCaseTransformFactory(lower,upper);return prefix+words.map((word,index)=>index===0?lower(word):transform(word,index)).join(options?.delimiter??``)+suffix}function lowerFactory(locale){return locale===!1?input=>input.toLowerCase():input=>input.toLocaleLowerCase(locale)}function upperFactory(locale){return locale===!1?input=>input.toUpperCase():input=>input.toLocaleUpperCase(locale)}function capitalCaseTransformFactory(lower,upper){return word=>`${upper(word[0])}${lower(word.slice(1))}`}function pascalCaseTransformFactory(lower,upper){return(word,index)=>{let char0=word[0];return(index>0&&char0>=`0`&&char0<=`9`?`_`+char0:upper(char0))+lower(word.slice(1))}}function splitPrefixSuffix(input,options={}){let splitFn=options.split??(options.separateNumbers?splitSeparateNumbers:split),prefixCharacters=options.prefixCharacters??``,suffixCharacters=options.suffixCharacters??``,prefixIndex=0,suffixIndex=input.length;for(;prefixIndex<input.length;){let char=input.charAt(prefixIndex);if(!prefixCharacters.includes(char))break;prefixIndex++}for(;suffixIndex>prefixIndex;){let index=suffixIndex-1,char=input.charAt(index);if(!suffixCharacters.includes(char))break;suffixIndex=index}return[input.slice(0,prefixIndex),splitFn(input.slice(prefixIndex,suffixIndex)),input.slice(suffixIndex)]}function getMiddlewareName(filename){return camelCase(basename(filename,`.ts`).replace(/^\d+_/,``))}async function loadMiddleware(middlewareDir,container,app){try{await fs$1.access(middlewareDir)}catch{return}let files=[];for await(let file of glob(`${middlewareDir}/**/*.ts`))!file.endsWith(`.test.ts`)&&!file.endsWith(`.spec.ts`)&&files.push(file);files.sort((a,b)=>basename(a).localeCompare(basename(b)));for(let file of files)try{let middleware=(await import(file)).default;if(middleware&&typeof middleware.handler==`function`){let name=middleware.name??getMiddlewareName(file);container.logger.debug({name,file},`Loading user middleware`),app.use(middleware.handler(container))}else container.logger.warn({file},`Middleware file missing default export with handler function`)}catch(err){throw container.logger.error({file,error:err instanceof Error?err.message:err},`Failed to load middleware`),err}}async function defineServer({container}){let isShuttingDown=!1,{host=`0.0.0.0`,port,timeout=3e4,bodyLimit=`1mb`,healthPath=`/health`,cors:corsConfig,helmet:helmetConfig,rateLimit:rateLimitConfigs,redisUrl}=container.server,app=express();app.locals.container=container;let redisClient=null;if(redisUrl&&rateLimitConfigs)try{redisClient=createClient({url:redisUrl}),redisClient.on(`error`,err=>{container.logger.error({error:err.message},`Redis client error`)}),await redisClient.connect(),container.logger.info(`Connected to Redis for rate limiting`)}catch(err){container.logger.error({error:err instanceof Error?err.message:err},`Failed to connect to Redis, falling back to in-memory rate limiting`),redisClient=null}if(app.use(defineShutdownMiddleware(container.logger,()=>isShuttingDown),defineTimeoutMiddleware(container.logger,timeout),defineRequestLoggerMiddleware(container.logger),defineHealthMiddleware(healthPath)),helmetConfig!==void 0&&app.use(helmet(helmetConfig)),corsConfig!==void 0&&app.use(cors(corsConfig)),rateLimitConfigs)for(let[index,config]of rateLimitConfigs.entries()){let limiter=rateLimit({windowMs:config.windowMs??60*1e3,limit:config.limit??100,standardHeaders:config.standardHeaders??`draft-8`,legacyHeaders:config.legacyHeaders??!1,skip:config.skip,keyGenerator:config.keyGenerator,handler:config.handler,message:config.message,statusCode:config.statusCode,requestPropertyName:config.requestPropertyName,skipFailedRequests:config.skipFailedRequests,skipSuccessfulRequests:config.skipSuccessfulRequests,requestWasSuccessful:config.requestWasSuccessful,validate:config.validate,store:redisClient?new RedisStore({sendCommand:(...args)=>redisClient.sendCommand(args),prefix:`rl:${index}:`}):config.store});app.use(limiter)}if(app.use(defineI18nMiddleware(container.i18n),express.json({limit:bodyLimit}),express.urlencoded({extended:!0,limit:bodyLimit})),await loadMiddleware(join(process.cwd(),`api`,`middleware`),container,app),app.get(`/`,(_req,res)=>{res.json({message:`${container.config.APP_NAME} server is running.`})}),process.env.NODE_ENV!==`production`){let{defineYouchErrorHandler}=await import(`./youch-handler-Jj6i1XIT.mjs`);app.use(defineYouchErrorHandler(container.logger))}else app.use(defineErrorHandlerMiddleware(container.logger));return{app,host,port,async start(){await new Promise((resolve,reject)=>{try{app.listen(port,host,()=>{resolve()})}catch(err){reject(err)}})},async close(){if(isShuttingDown=!0,app.uwsApp.close(),redisClient)try{await redisClient.destroy()}catch(err){container.logger.warn({error:err instanceof Error?err.message:err},`Error disconnecting from Redis`)}}}}function defineWorker(){return{async start(){await DBOS.launch()},async close(){await DBOS.shutdown()}}}const runtimeInfo=`(AppOS v${version} | Node ${process.version})`;var start_default=defineCommand({description:`Start the HTTP server and/or DBOS workflow worker`,aliases:[`s`],args:z.tuple([]),opts:z.object({service:z.enum([`server`,`worker`]).optional().meta({short:`s`,description:`Start only a specific service (default: both)`})}),async run(ctx){let{container,opts}=ctx,{logger}=container,startServer=!opts.service||opts.service===`server`,startWorker=!opts.service||opts.service===`worker`,server=null,worker=null,isShuttingDown=!1,shutdown=async signal=>{if(!isShuttingDown){isShuttingDown=!0,logger.info(`Shutdown initiated (${signal})`);try{server&&(await server.close(),logger.info(`HTTP server stopped`)),worker&&(await worker.close(),logger.info(`DBOS worker stopped`)),await ctx.cleanup()}catch(error){logger.error({error},`Shutdown error`)}process.exit(0)}};process.on(`SIGINT`,()=>shutdown(`SIGINT`)),process.on(`SIGTERM`,()=>shutdown(`SIGTERM`)),startWorker&&(worker=defineWorker(),await worker.start(),logger.info(`DBOS worker ready ${runtimeInfo}`)),startServer&&(server=await defineServer({container}),await server.start(),logger.info(`HTTP server ready at http://${server.host}:${server.port} ${runtimeInfo}`))}}),up_default=defineCommand({description:`Setup the infrastructure`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`up`);try{await ctx.spinner(`Starting containers`,()=>ctx.exec(`docker`,[`compose`,`--profile=infra`,`up`,`--wait`]))}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}ctx.step(`Running schema migrations`),await runMigrations({ctx,migrationType:`schema`}),ctx.step(`Seeding databases`),await runSeeds({ctx}),await ctx.cleanup(),ctx.outro()}});const BUILTIN_COMMANDS={build:build_default,"db:data:gen":gen_default$1,"db:data:migrate":migrate_default$1,"db:schema:gen":gen_default,"db:schema:migrate":migrate_default,"db:seed":seed_default,down:down_default,preview:preview_default,repl:repl_default,reset:reset_default,start:start_default,up:up_default};function scanCommands(dir,baseDir=dir){let files=[];try{let entries=fs.readdirSync(dir,{withFileTypes:!0});for(let entry of entries){let fullPath=path.join(dir,entry.name);entry.isDirectory()?files.push(...scanCommands(fullPath,baseDir)):entry.isFile()&&entry.name.endsWith(`.ts`)&&!/\.(spec|test)\.tsx?$/.test(entry.name)&&files.push(fullPath)}}catch{}return files}function pathToCommandName(filePath,commandsDir){return path.relative(commandsDir,filePath).replace(/\.ts$/,``).replace(/\//g,`:`)}async function parseCommand(rawArgs,command){let parsedOptions={},positionalArgs=[],shortOptionMap=new Map;if(command.opts&&`shape`in command.opts){let schemaShape=command.opts.shape;for(let[key,value]of Object.entries(schemaShape)){let meta=value.meta?.();meta?.short&&typeof meta.short==`string`&&shortOptionMap.set(meta.short,key)}}for(let i=0;i<rawArgs.length;i++){let arg=rawArgs[i];if(arg.startsWith(`--`)){let[key,...valueParts]=arg.slice(2).split(`=`);if(valueParts.length>0)parsedOptions[key]=valueParts.join(`=`);else{let nextArg=rawArgs[i+1];nextArg&&!nextArg.startsWith(`-`)?(parsedOptions[key]=nextArg,i++):parsedOptions[key]=!0}}else if(arg.startsWith(`-`)&&arg.length>1){let shortOptions=arg.slice(1);if(shortOptions.length>1)for(let shortOpt of shortOptions){let longOpt=shortOptionMap.get(shortOpt);longOpt&&(parsedOptions[longOpt]=!0)}else{let shortOpt=shortOptions,longOpt=shortOptionMap.get(shortOpt)||shortOpt,nextArg=rawArgs[i+1];nextArg&&!nextArg.startsWith(`-`)?(parsedOptions[longOpt]=nextArg,i++):parsedOptions[longOpt]=!0}}else positionalArgs.push(arg)}let options={};if(command.opts&&`safeParse`in command.opts){let result=command.opts.safeParse(parsedOptions);if(!result.success){for(let issue of result.error.issues){let field=issue.path.join(`.`);console.error(colors.red(`Error:\n --${field} => ${issue.message.toLowerCase()}`))}process.exit(1)}options=result.data}let args=[];if(command.args&&`safeParse`in command.args){let result=command.args.safeParse(positionalArgs);if(!result.success){for(let issue of result.error.issues){let field=issue.path.join(`.`);console.error(colors.red(`Error:\n ${field} => ${issue.message.toLowerCase()}`))}process.exit(1)}args=result.data}return{args,options}}function showHelp(container,commands){console.log(`${colors.bold(container.config.APP_NAME)} - ${container.config.APP_DESC}\n`),console.log(`Commands:`);let maxLength=0;for(let[name,cmd]of commands){let aliasesText=cmd.aliases&&cmd.aliases.length>0?` (${cmd.aliases.join(`, `)})`:``,totalLength=name.length+aliasesText.length;maxLength=Math.max(maxLength,totalLength)}maxLength+=8;for(let[name,cmd]of commands){let aliasesText=cmd.aliases&&cmd.aliases.length>0?` (${cmd.aliases.join(`, `)})`:``,aliases=cmd.aliases&&cmd.aliases.length>0?colors.dim(` (${cmd.aliases.join(`, `)})`):``,nameWithAliases=`${colors.cyan(name)}${aliases}`,plainLength=name.length+aliasesText.length,padding=` `.repeat(Math.max(0,maxLength-plainLength));console.log(` ${nameWithAliases}${padding}${cmd.description||`No description`}`)}}function showCommandHelp(commandName,command){console.log(`${command.description||`No description`}`),console.log();let usage=`Usage: ${colors.cyan(commandName)}`;if(command.args){let def=command.args._def,typeName=def?.typeName||def?.type;if(typeName===`ZodTuple`||typeName===`tuple`){let items=def.items||[];for(let item of items){let zodItem=item,name=zodItem.meta?.()?.name||zodItem._def?.description||`arg`,isOptional=zodItem.isOptional?.()??!1;usage+=isOptional?` [${name}]`:` <${name}>`}if(def.rest){let restDesc=def.rest._def?.description||`args`;usage+=` [${restDesc}...]`}}else if(typeName===`ZodArray`||typeName===`array`){let displayName=command.args.meta?.()?.name||`args`,minItems=def.minLength?.value||0;minItems===0?usage+=` [${displayName}...]`:minItems===1?usage+=` <${displayName}>`:usage+=` <${displayName}...>`}}if(command.opts&&(usage+=` [options]`),console.log(usage),console.log(),command.args){let def=command.args._def,typeName=def?.typeName||def?.type;if(typeName===`ZodTuple`||typeName===`tuple`||typeName===`ZodArray`||typeName===`array`){if(console.log(`Arguments:`),typeName===`ZodTuple`||typeName===`tuple`){let items=def.items||[];for(let i=0;i<items.length;i++){let item=items[i],meta=item.meta?.(),name=meta?.name||item._def?.description||`arg${i+1}`,description=meta?.description||item._def?.description||name,required=item.isOptional?.()??!1?``:` (required)`;console.log(` ${colors.cyan(name)}${colors.dim(required)}\t\t${description}`)}if(def.rest){let restDesc=def.rest._def?.description||`additional args`;console.log(` ${colors.cyan(`${restDesc}...`)}\t\t${restDesc}`)}}else{let meta=command.args.meta?.(),displayName=meta?.name||`args`,description=meta?.description||``,minItems=def.minLength?.value||0,argDisplay=displayName;(minItems===0||minItems>1)&&(argDisplay=`${displayName}...`);let required=minItems>0?` (required)`:``;console.log(` ${colors.cyan(argDisplay)}${colors.dim(required)}\t\t${description}`)}console.log()}}if(console.log(`Options:`),console.log(` ${colors.cyan(`-h, --help`)}\t\t\tShow help for this command`),command.opts&&`shape`in command.opts){let schemaShape=command.opts.shape;for(let[key,schema]of Object.entries(schemaShape)){let zodType=schema,meta=zodType.meta?.(),isOptional=zodType.isOptional?.()??!0,isBoolean=zodType._def?.typeName===`ZodBoolean`,short=meta?.short?`-${meta.short}, `:` `,long=`--${key}`,value=isBoolean?``:` <value>`,required=isOptional?``:` (required)`,defaultValue=zodType._def?.defaultValue,defaultStr=defaultValue===void 0?``:`(default: ${JSON.stringify(defaultValue)})`,description=meta?.description||``;console.log(` ${colors.cyan(short+long+value)}\t\t${description} ${colors.dim(required+defaultStr)}`)}}}async function loadCommands(commandsDir,commands,aliases){let commandFiles=scanCommands(commandsDir);for(let filePath of commandFiles)try{let command=(await import(filePath)).default;if(command&&typeof command==`object`&&`run`in command){let commandName=pathToCommandName(filePath,commandsDir);if(commands.set(commandName,command),command.aliases)for(let alias of command.aliases)aliases.set(alias,commandName)}}catch(error){console.warn(colors.yellow(`Warning: Could not load command from ${filePath}: ${error instanceof Error?error.message:String(error)}`))}}async function defineCli(opts){let commands=new Map,aliases=new Map;for(let[name,command]of Object.entries(BUILTIN_COMMANDS))if(commands.set(name,command),command.aliases)for(let alias of command.aliases)aliases.set(alias,name);return await loadCommands(opts.commandsDir,commands,aliases),await loadEvents({container:opts.container}),DBOS.setConfig({name:opts.container.config.APP_NAME,runAdminServer:!1,systemDatabaseUrl:opts.container.worker.dbUrl}),await loadWorkflows({container:opts.container,dbos:DBOS}),{async run(args=process.argv.slice(2)){let[cmdName,...cmdArgs]=args;if(!cmdName||cmdName===`--help`||cmdName===`-h`){showHelp(opts.container,commands);return}let resolvedName=aliases.get(cmdName)||cmdName,command=commands.get(resolvedName);if(command||(console.error(colors.red(`Unknown command: ${cmdName}\n`)),showHelp(opts.container,commands),process.exit(1)),cmdArgs.includes(`--help`)||cmdArgs.includes(`-h`)){showCommandHelp(resolvedName,command);return}try{let{args:parsedArgs,options}=await parseCommand(cmdArgs,command),ctx=defineCommandContext(parsedArgs,options,opts.container);await command.run(ctx)}catch(error){error instanceof Error&&(console.error(colors.red(`Error:`),error.message),(error.message.includes(`argument`)||error.message.includes(`Invalid arguments`))&&(console.log(),console.log(`Run '${colors.cyan(`${resolvedName} --help`)}' to see usage information.`))),process.exit(1)}},showHelp(){showHelp(opts.container,commands)},showCommandHelp(command){showCommandHelp(Array.from(commands.entries()).find(([_,cmd])=>cmd===command)?.[0]||`unknown`,command)}}}const{GlobalLogger}=createRequire(import.meta.url)(`../../node_modules/@dbos-inc/dbos-sdk/dist/src/telemetry/logs`);async function main(){let{defineContainer}=await import(join(process.cwd(),APPOS_DIR,`main.ts`)),container=await defineContainer();GlobalLogger.prototype.info=(logEntry,metadata)=>{if(typeof logEntry==`string`){if(logEntry.startsWith(`Initializing DBOS`)||logEntry.startsWith(`System Database URL:`)||logEntry.startsWith(`Executor ID:`)||logEntry.startsWith(`Application version:`)||logEntry.startsWith(`No workflows to recover from application`)||logEntry.startsWith(`DBOS launched!`))return;container.logger.info(metadata,logEntry)}else container.logger.info(metadata,JSON.stringify(logEntry))},await(await defineCli({container,commandsDir:join(process.cwd(),APPOS_DIR,COMMANDS_DIR)})).run(process.argv.slice(2))}try{await main()}catch(err){console.error(err),process.exit(1)}export{};
|
|
362
|
+
`.replaceAll(/^\s+/gm,``).trim()},toInt=input=>typeof input==`number`?input:Number.parseInt((input??``).toString(),10),parseScriptResponse=results=>{if(!Array.isArray(results))throw TypeError(`Expected result to be array of values`);if(results.length!==2)throw Error(`Expected 2 replies, got ${results.length}`);let totalHits=results[0]===!1?0:toInt(results[0]),timeToExpire=toInt(results[1]);return{totalHits,resetTime:new Date(Date.now()+timeToExpire)}};var RedisStore=class{sendCommand;prefix;resetExpiryOnChange;incrementScriptSha;getScriptSha;windowMs;constructor(options){if(typeof options!=`object`)throw TypeError(`rate-limit-redis: Error: options object is required`);if(`sendCommand`in options&&!(`sendCommandCluster`in options)){let sendCommandFn=options.sendCommand.bind(this);this.sendCommand=async({command})=>sendCommandFn(...command)}else if(!(`sendCommand`in options)&&`sendCommandCluster`in options)this.sendCommand=options.sendCommandCluster.bind(this);else throw Error(`rate-limit-redis: Error: options must include either sendCommand or sendCommandCluster (but not both)`);this.prefix=options.prefix??`rl:`,this.resetExpiryOnChange=options.resetExpiryOnChange??!1,this.incrementScriptSha=this.loadIncrementScript(),this.getScriptSha=this.loadGetScript()}async loadIncrementScript(key){let result=await this.sendCommand({key,isReadOnly:!1,command:[`SCRIPT`,`LOAD`,scripts.increment]});if(typeof result!=`string`)throw TypeError(`unexpected reply from redis client`);return result}async loadGetScript(key){let result=await this.sendCommand({key,isReadOnly:!1,command:[`SCRIPT`,`LOAD`,scripts.get]});if(typeof result!=`string`)throw TypeError(`unexpected reply from redis client`);return result}async retryableIncrement(_key){let key=this.prefixKey(_key),evalCommand=async()=>this.sendCommand({key,isReadOnly:!1,command:[`EVALSHA`,await this.incrementScriptSha,`1`,key,this.resetExpiryOnChange?`1`:`0`,this.windowMs.toString()]});try{return await evalCommand()}catch{return this.incrementScriptSha=this.loadIncrementScript(key),evalCommand()}}prefixKey(key){return`${this.prefix}${key}`}init(options){this.windowMs=options.windowMs}async get(_key){let key=this.prefixKey(_key),results,evalCommand=async()=>this.sendCommand({key,isReadOnly:!0,command:[`EVALSHA`,await this.getScriptSha,`1`,key]});try{results=await evalCommand()}catch{this.getScriptSha=this.loadGetScript(key),results=await evalCommand()}return parseScriptResponse(results)}async increment(key){return parseScriptResponse(await this.retryableIncrement(key))}async decrement(_key){let key=this.prefixKey(_key);await this.sendCommand({key,isReadOnly:!1,command:[`DECR`,key]})}async resetKey(_key){let key=this.prefixKey(_key);await this.sendCommand({key,isReadOnly:!1,command:[`DEL`,key]})}};function getErrorStatus(error){if(error&&typeof error==`object`&&`status`in error){let status=error.status;if(typeof status==`number`)return status}return error instanceof SyntaxError?400:500}function defineErrorHandlerMiddleware(logger){return(error,req,res,next)=>{let userAgent=req.headers[`user-agent`];if(logger.error({error:error.message,stack:error.stack,url:req.url,method:req.method,userAgent:typeof userAgent==`string`?userAgent:userAgent?.[0],ip:req.ip},`Unhandled request error`),res.headersSent)return next(error);let isDevelopment=process.env.NODE_ENV!==`production`;res.status(getErrorStatus(error)).json({error:`Internal server error`,...isDevelopment&&{message:error.message,stack:error.stack}})}}function defineHealthMiddleware(path$2=`/health`){return(req,res,next)=>{if(req.path!==path$2)return next();res.status(200).json({status:`healthy`,timestamp:new Date().toISOString(),uptime:process.uptime()})}}function defineI18nMiddleware(i18n){return(req,res,next)=>{let acceptLanguage=req.headers[`accept-language`],detectedLng=`en`;if(acceptLanguage){let parsed=acceptLanguage.split(`,`)[0].split(`;`)[0].trim();parsed&&parsed.length>0&&(detectedLng=parsed)}req.dir=i18n.dir(detectedLng),req.language=detectedLng,req.languages=i18n.languages,req.t=i18n.getFixedT(detectedLng),next()}}var instrumentation_exports={};import*as import__opentelemetry_api from"@opentelemetry/api";__reExport(instrumentation_exports,import__opentelemetry_api),register(`@opentelemetry/instrumentation/hook.mjs`,import.meta.url);const service={name:process.env.APP_NAME||`appos`,version:process.env.APP_VERSION||`development`};new NodeSDK({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:service.name,[ATTR_SERVICE_VERSION]:service.version}),spanProcessors:[new BatchSpanProcessor(new OTLPTraceExporter({url:process.env.OTEL_EXPORTER_OTLP_ENDPOINT||`http://localhost:4318/v1/traces`,headers:process.env.OTEL_EXPORTER_OTLP_HEADERS?JSON.parse(process.env.OTEL_EXPORTER_OTLP_HEADERS):void 0}))],instrumentations:[getNodeAutoInstrumentations({"@opentelemetry/instrumentation-fs":{enabled:!1},"@opentelemetry/instrumentation-dns":{enabled:!1}}),new PinoInstrumentation({logHook:(_span,record)=>{record[`service.name`]=service.name}})]}).start();const CF_COUNTRY_HEADER=`cf-ipcountry`;function extractRequestMetadata(req,config){config?.injectCountry&&!req.headers[CF_COUNTRY_HEADER]&&(req.headers[CF_COUNTRY_HEADER]=config.injectCountry);let forwardedFor=req.headers[`x-forwarded-for`],ipAddress;ipAddress=typeof forwardedFor==`string`?forwardedFor.split(`,`)[0].trim():Array.isArray(forwardedFor)&&forwardedFor.length>0?forwardedFor[0].split(`,`)[0].trim():req.socket.remoteAddress||``;let userAgent=req.headers[`user-agent`]||``,country=req.headers[CF_COUNTRY_HEADER]||``;return{ipAddress,userAgent,country}}function defineRequestLoggerMiddleware(logger,config){let tracer;try{tracer=instrumentation_exports.trace.getTracer(`request-logger`)}catch(error){logger.warn({error},`Failed to initialize OpenTelemetry tracer`),tracer=null}return(req,res,next)=>{let metadata=extractRequestMetadata(req,config);req.metadata=metadata;let startTime=Date.now(),span=null,requestId;if(tracer)try{span=tracer.startSpan(`${req.method} ${req.path}`,{kind:instrumentation_exports.SpanKind.SERVER,attributes:{"http.method":req.method,"http.url":req.url,"http.target":req.path,"http.host":(typeof req.headers.host==`string`?req.headers.host:req.headers[`:authority`])||`unknown`,"http.scheme":req.protocol,"http.user_agent":metadata.userAgent||`unknown`,"http.client_ip":metadata.ipAddress,"http.client_country":metadata.country}}),requestId=span.spanContext().traceId}catch(error){logger.warn({error},`Failed to create OpenTelemetry span`),span=null,requestId=crypto.randomUUID()}else logger.info(`OpenTelemetry tracer not available, skipping span creation`),span=null,requestId=crypto.randomUUID();let ctx=span?instrumentation_exports.trace.setSpan(instrumentation_exports.context.active(),span):instrumentation_exports.context.active(),skipLogging=(path$2=>path$2.startsWith(`/@`)||path$2.startsWith(`/node_modules/`)||path$2.startsWith(`/assets/`)||path$2.startsWith(`/public/`)||path$2.match(/\.(js|css|ico|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot|map)$/)||path$2.includes(`/locales/`)||path$2.endsWith(`.ts`)||path$2.endsWith(`.tsx`)||path$2.endsWith(`.json`))(req.path);res.setHeader(`X-Request-Id`,requestId),req.requestId=requestId,res.on(`finish`,()=>{let duration=Date.now()-startTime;if(span)try{span.setAttributes({"http.status_code":res.statusCode,"http.response_content_length":res.get(`content-length`)||0}),res.statusCode>=400?span.setStatus({code:instrumentation_exports.SpanStatusCode.ERROR,message:`HTTP ${res.statusCode}`}):span.setStatus({code:instrumentation_exports.SpanStatusCode.OK}),span.end()}catch(error){logger.warn({error},`Failed to update OpenTelemetry span`)}skipLogging||instrumentation_exports.context.with(ctx,()=>{logger.info({requestId,method:req.method,url:req.path,status:res.statusCode,duration:`${duration}ms`},`Request completed`)})}),res.on(`close`,()=>{if(!(res.writableEnded||res.finished)){let duration=Date.now()-startTime;if(span)try{span.setStatus({code:instrumentation_exports.SpanStatusCode.ERROR,message:`Request closed unexpectedly`}),span.end()}catch(error){logger.warn({error},`Failed to update OpenTelemetry span`)}skipLogging||instrumentation_exports.context.with(ctx,()=>{logger.warn({requestId,method:req.method,url:req.path,duration:`${duration}ms`},`Request closed unexpectedly`)})}});let originalNext=next;next=error=>{if(error){let duration=Date.now()-startTime;if(span)try{span.recordException(error),span.setStatus({code:instrumentation_exports.SpanStatusCode.ERROR,message:error instanceof Error?error.message:String(error)}),span.end()}catch(spanError){logger.warn({error:spanError},`Failed to record exception in span`)}skipLogging||instrumentation_exports.context.with(ctx,()=>{logger.error({requestId,method:req.method,url:req.path,status:res.statusCode||500,duration:`${duration}ms`,error:error instanceof Error?error.message:String(error)},`Request failed`)})}originalNext(error)},instrumentation_exports.context.with(ctx,()=>next())}}function defineShutdownMiddleware(logger,isShuttingDown){return(req,res,next)=>{if(isShuttingDown()){logger.info({url:req.url,method:req.method},`Rejecting request during shutdown`),res.status(503).set(`Connection`,`close`).json({error:`Server is shutting down`});return}next()}}function defineTimeoutMiddleware(logger,timeoutMs=3e4){return(req,res,next)=>{let timeoutFired=!1,timeoutId=setTimeout(()=>{timeoutFired=!0,logger.warn({url:req.url,method:req.method,timeout:timeoutMs},`Request timeout`),res.headersSent||res.status(408).json({error:`Request timeout`}),res.removeListener(`finish`,clearTimeoutHandler),res.removeListener(`close`,clearTimeoutHandler)},timeoutMs),clearTimeoutHandler=()=>{timeoutFired||clearTimeout(timeoutId)};res.on(`finish`,clearTimeoutHandler),res.on(`close`,clearTimeoutHandler),next()}}const SPLIT_LOWER_UPPER_RE=/([\p{Ll}\d])(\p{Lu})/gu,SPLIT_UPPER_UPPER_RE=/(\p{Lu})([\p{Lu}][\p{Ll}])/gu,SPLIT_SEPARATE_NUMBER_RE=/(\d)\p{Ll}|(\p{L})\d/u,DEFAULT_STRIP_REGEXP=/[^\p{L}\d]+/giu,SPLIT_REPLACE_VALUE=`$1\0$2`,DEFAULT_PREFIX_SUFFIX_CHARACTERS=``;function split(value){let result=value.trim();result=result.replace(SPLIT_LOWER_UPPER_RE,SPLIT_REPLACE_VALUE).replace(SPLIT_UPPER_UPPER_RE,SPLIT_REPLACE_VALUE),result=result.replace(DEFAULT_STRIP_REGEXP,`\0`);let start=0,end=result.length;for(;result.charAt(start)===`\0`;)start++;if(start===end)return[];for(;result.charAt(end-1)===`\0`;)end--;return result.slice(start,end).split(/\0/g)}function splitSeparateNumbers(value){let words=split(value);for(let i=0;i<words.length;i++){let word=words[i],match=SPLIT_SEPARATE_NUMBER_RE.exec(word);if(match){let offset=match.index+(match[1]??match[2]).length;words.splice(i,1,word.slice(0,offset),word.slice(offset))}}return words}function camelCase(input,options){let[prefix,words,suffix]=splitPrefixSuffix(input,options),lower=lowerFactory(options?.locale),upper=upperFactory(options?.locale),transform=options?.mergeAmbiguousCharacters?capitalCaseTransformFactory(lower,upper):pascalCaseTransformFactory(lower,upper);return prefix+words.map((word,index)=>index===0?lower(word):transform(word,index)).join(options?.delimiter??``)+suffix}function lowerFactory(locale){return locale===!1?input=>input.toLowerCase():input=>input.toLocaleLowerCase(locale)}function upperFactory(locale){return locale===!1?input=>input.toUpperCase():input=>input.toLocaleUpperCase(locale)}function capitalCaseTransformFactory(lower,upper){return word=>`${upper(word[0])}${lower(word.slice(1))}`}function pascalCaseTransformFactory(lower,upper){return(word,index)=>{let char0=word[0];return(index>0&&char0>=`0`&&char0<=`9`?`_`+char0:upper(char0))+lower(word.slice(1))}}function splitPrefixSuffix(input,options={}){let splitFn=options.split??(options.separateNumbers?splitSeparateNumbers:split),prefixCharacters=options.prefixCharacters??``,suffixCharacters=options.suffixCharacters??``,prefixIndex=0,suffixIndex=input.length;for(;prefixIndex<input.length;){let char=input.charAt(prefixIndex);if(!prefixCharacters.includes(char))break;prefixIndex++}for(;suffixIndex>prefixIndex;){let index=suffixIndex-1,char=input.charAt(index);if(!suffixCharacters.includes(char))break;suffixIndex=index}return[input.slice(0,prefixIndex),splitFn(input.slice(prefixIndex,suffixIndex)),input.slice(suffixIndex)]}function getMiddlewareName(filename){return camelCase(basename(filename,`.ts`).replace(/^\d+_/,``))}async function loadMiddleware(middlewareDir,container,app){try{await fs$1.access(middlewareDir)}catch{return}let files=[];for await(let file of glob(`${middlewareDir}/**/*.ts`))!file.endsWith(`.test.ts`)&&!file.endsWith(`.spec.ts`)&&files.push(file);files.sort((a,b)=>basename(a).localeCompare(basename(b)));for(let file of files)try{let middleware=(await import(file)).default;if(middleware&&typeof middleware.handler==`function`){let name=middleware.name??getMiddlewareName(file);container.logger.debug({name,file},`Loading user middleware`),app.use(middleware.handler(container))}else container.logger.warn({file},`Middleware file missing default export with handler function`)}catch(err){throw container.logger.error({file,error:err instanceof Error?err.message:err},`Failed to load middleware`),err}}async function defineServer({container}){let isShuttingDown=!1,{host=`0.0.0.0`,port,timeout=3e4,bodyLimit=`1mb`,healthPath=`/health`,cors:corsConfig,helmet:helmetConfig,rateLimit:rateLimitConfigs,redisUrl}=container.server,app=express();app.locals.container=container;let redisClient=null;if(redisUrl&&rateLimitConfigs)try{redisClient=createClient({url:redisUrl}),redisClient.on(`error`,err=>{container.logger.error({error:err.message},`Redis client error`)}),await redisClient.connect(),container.logger.info(`Connected to Redis for rate limiting`)}catch(err){container.logger.error({error:err instanceof Error?err.message:err},`Failed to connect to Redis, falling back to in-memory rate limiting`),redisClient=null}if(app.use(defineShutdownMiddleware(container.logger,()=>isShuttingDown),defineTimeoutMiddleware(container.logger,timeout),defineRequestLoggerMiddleware(container.logger),defineHealthMiddleware(healthPath)),helmetConfig!==void 0&&app.use(helmet(helmetConfig)),corsConfig!==void 0&&app.use(cors(corsConfig)),rateLimitConfigs)for(let[index,config]of rateLimitConfigs.entries()){let limiter=rateLimit({windowMs:config.windowMs??60*1e3,limit:config.limit??100,standardHeaders:config.standardHeaders??`draft-8`,legacyHeaders:config.legacyHeaders??!1,skip:config.skip,keyGenerator:config.keyGenerator,handler:config.handler,message:config.message,statusCode:config.statusCode,requestPropertyName:config.requestPropertyName,skipFailedRequests:config.skipFailedRequests,skipSuccessfulRequests:config.skipSuccessfulRequests,requestWasSuccessful:config.requestWasSuccessful,validate:config.validate,store:redisClient?new RedisStore({sendCommand:(...args)=>redisClient.sendCommand(args),prefix:`rl:${index}:`}):config.store});app.use(limiter)}if(app.use(defineI18nMiddleware(container.i18n),express.json({limit:bodyLimit}),express.urlencoded({extended:!0,limit:bodyLimit})),await loadMiddleware(join(process.cwd(),`api`,`middleware`),container,app),app.get(`/`,(_req,res)=>{res.json({message:`${container.config.APP_NAME} server is running.`})}),process.env.NODE_ENV!==`production`){let{defineYouchErrorHandler}=await import(`./youch-handler-Jj6i1XIT.mjs`);app.use(defineYouchErrorHandler(container.logger))}else app.use(defineErrorHandlerMiddleware(container.logger));return{app,host,port,async start(){await new Promise((resolve,reject)=>{try{app.listen(port,host,()=>{resolve()})}catch(err){reject(err)}})},async close(){if(isShuttingDown=!0,app.uwsApp.close(),redisClient)try{await redisClient.destroy()}catch(err){container.logger.warn({error:err instanceof Error?err.message:err},`Error disconnecting from Redis`)}}}}function defineWorker(){return{async start(){await DBOS.launch()},async close(){await DBOS.shutdown()}}}const runtimeInfo=`(AppOS v${version} | Node ${process.version})`;var start_default=defineCommand({description:`Start the HTTP server and/or DBOS workflow worker`,aliases:[`s`],args:z.tuple([]),opts:z.object({service:z.enum([`server`,`worker`]).optional().meta({short:`s`,description:`Start only a specific service (default: both)`})}),async run(ctx){let{container,opts}=ctx,{logger}=container,startServer=!opts.service||opts.service===`server`,startWorker=!opts.service||opts.service===`worker`,server=null,worker=null,isShuttingDown=!1,shutdown=async signal=>{if(!isShuttingDown){isShuttingDown=!0,logger.info(`Shutdown initiated (${signal})`);try{server&&(await server.close(),logger.info(`HTTP server stopped`)),worker&&(await worker.close(),logger.info(`DBOS worker stopped`)),await ctx.cleanup()}catch(error){logger.error({error},`Shutdown error`)}process.exit(0)}};process.on(`SIGINT`,()=>shutdown(`SIGINT`)),process.on(`SIGTERM`,()=>shutdown(`SIGTERM`)),startWorker&&(worker=defineWorker(),await worker.start(),logger.info(`DBOS worker ready ${runtimeInfo}`)),startServer&&(server=await defineServer({container}),await server.start(),logger.info(`HTTP server ready at http://${server.host}:${server.port} ${runtimeInfo}`))}}),up_default=defineCommand({description:`Setup the infrastructure`,args:z.tuple([]),opts:z.object({}),async run(ctx){ctx.intro(`up`);try{await ctx.spinner(`Starting containers`,()=>ctx.exec(`docker`,[`compose`,`--profile=infra`,`up`,`--wait`]))}catch(error){ctx.fail(error instanceof Error?error.message:String(error))}ctx.step(`Running schema migrations`),await runMigrations({ctx,migrationType:`schema`}),ctx.step(`Seeding databases`),await runSeeds({ctx}),await ctx.cleanup(),ctx.outro()}});const BUILTIN_COMMANDS={build:build_default,"db:data:gen":gen_default$1,"db:data:migrate":migrate_default$1,"db:schema:gen":gen_default,"db:schema:migrate":migrate_default,"db:seed":seed_default,down:down_default,preview:preview_default,repl:repl_default,reset:reset_default,start:start_default,up:up_default};function scanCommands(dir,baseDir=dir){let files=[];try{let entries=fs.readdirSync(dir,{withFileTypes:!0});for(let entry of entries){let fullPath=path.join(dir,entry.name);entry.isDirectory()?files.push(...scanCommands(fullPath,baseDir)):entry.isFile()&&entry.name.endsWith(`.ts`)&&!/\.(spec|test)\.tsx?$/.test(entry.name)&&files.push(fullPath)}}catch{}return files}function pathToCommandName(filePath,commandsDir){return path.relative(commandsDir,filePath).replace(/\.ts$/,``).replace(/\//g,`:`)}async function parseCommand(rawArgs,command){let parsedOptions={},positionalArgs=[],shortOptionMap=new Map;if(command.opts&&`shape`in command.opts){let schemaShape=command.opts.shape;for(let[key,value]of Object.entries(schemaShape)){let meta=value.meta?.();meta?.short&&typeof meta.short==`string`&&shortOptionMap.set(meta.short,key)}}for(let i=0;i<rawArgs.length;i++){let arg=rawArgs[i];if(arg.startsWith(`--`)){let[key,...valueParts]=arg.slice(2).split(`=`);if(valueParts.length>0)parsedOptions[key]=valueParts.join(`=`);else{let nextArg=rawArgs[i+1];nextArg&&!nextArg.startsWith(`-`)?(parsedOptions[key]=nextArg,i++):parsedOptions[key]=!0}}else if(arg.startsWith(`-`)&&arg.length>1){let shortOptions=arg.slice(1);if(shortOptions.length>1)for(let shortOpt of shortOptions){let longOpt=shortOptionMap.get(shortOpt);longOpt&&(parsedOptions[longOpt]=!0)}else{let shortOpt=shortOptions,longOpt=shortOptionMap.get(shortOpt)||shortOpt,nextArg=rawArgs[i+1];nextArg&&!nextArg.startsWith(`-`)?(parsedOptions[longOpt]=nextArg,i++):parsedOptions[longOpt]=!0}}else positionalArgs.push(arg)}let options={};if(command.opts&&`safeParse`in command.opts){let result=command.opts.safeParse(parsedOptions);if(!result.success){for(let issue of result.error.issues){let field=issue.path.join(`.`);console.error(colors.red(`Error:\n --${field} => ${issue.message.toLowerCase()}`))}process.exit(1)}options=result.data}let args=[];if(command.args&&`safeParse`in command.args){let result=command.args.safeParse(positionalArgs);if(!result.success){for(let issue of result.error.issues){let field=issue.path.join(`.`);console.error(colors.red(`Error:\n ${field} => ${issue.message.toLowerCase()}`))}process.exit(1)}args=result.data}return{args,options}}function showHelp(container,commands){console.log(`${colors.bold(container.config.APP_NAME)} - ${container.config.APP_DESC}\n`),console.log(`Commands:`);let maxLength=0;for(let[name,cmd]of commands){let aliasesText=cmd.aliases&&cmd.aliases.length>0?` (${cmd.aliases.join(`, `)})`:``,totalLength=name.length+aliasesText.length;maxLength=Math.max(maxLength,totalLength)}maxLength+=8;for(let[name,cmd]of commands){let aliasesText=cmd.aliases&&cmd.aliases.length>0?` (${cmd.aliases.join(`, `)})`:``,aliases=cmd.aliases&&cmd.aliases.length>0?colors.dim(` (${cmd.aliases.join(`, `)})`):``,nameWithAliases=`${colors.cyan(name)}${aliases}`,plainLength=name.length+aliasesText.length,padding=` `.repeat(Math.max(0,maxLength-plainLength));console.log(` ${nameWithAliases}${padding}${cmd.description||`No description`}`)}}function showCommandHelp(commandName,command){console.log(`${command.description||`No description`}`),console.log();let usage=`Usage: ${colors.cyan(commandName)}`;if(command.args){let def=command.args._def,typeName=def?.typeName||def?.type;if(typeName===`ZodTuple`||typeName===`tuple`){let items=def.items||[];for(let item of items){let zodItem=item,name=zodItem.meta?.()?.name||zodItem._def?.description||`arg`,isOptional=zodItem.isOptional?.()??!1;usage+=isOptional?` [${name}]`:` <${name}>`}if(def.rest){let restDesc=def.rest._def?.description||`args`;usage+=` [${restDesc}...]`}}else if(typeName===`ZodArray`||typeName===`array`){let displayName=command.args.meta?.()?.name||`args`,minItems=def.minLength?.value||0;minItems===0?usage+=` [${displayName}...]`:minItems===1?usage+=` <${displayName}>`:usage+=` <${displayName}...>`}}if(command.opts&&(usage+=` [options]`),console.log(usage),console.log(),command.args){let def=command.args._def,typeName=def?.typeName||def?.type;if(typeName===`ZodTuple`||typeName===`tuple`||typeName===`ZodArray`||typeName===`array`){if(console.log(`Arguments:`),typeName===`ZodTuple`||typeName===`tuple`){let items=def.items||[];for(let i=0;i<items.length;i++){let item=items[i],meta=item.meta?.(),name=meta?.name||item._def?.description||`arg${i+1}`,description=meta?.description||item._def?.description||name,required=item.isOptional?.()??!1?``:` (required)`;console.log(` ${colors.cyan(name)}${colors.dim(required)}\t\t${description}`)}if(def.rest){let restDesc=def.rest._def?.description||`additional args`;console.log(` ${colors.cyan(`${restDesc}...`)}\t\t${restDesc}`)}}else{let meta=command.args.meta?.(),displayName=meta?.name||`args`,description=meta?.description||``,minItems=def.minLength?.value||0,argDisplay=displayName;(minItems===0||minItems>1)&&(argDisplay=`${displayName}...`);let required=minItems>0?` (required)`:``;console.log(` ${colors.cyan(argDisplay)}${colors.dim(required)}\t\t${description}`)}console.log()}}if(console.log(`Options:`),console.log(` ${colors.cyan(`-h, --help`)}\t\t\tShow help for this command`),command.opts&&`shape`in command.opts){let schemaShape=command.opts.shape;for(let[key,schema]of Object.entries(schemaShape)){let zodType=schema,meta=zodType.meta?.(),isOptional=zodType.isOptional?.()??!0,isBoolean=zodType._def?.typeName===`ZodBoolean`,short=meta?.short?`-${meta.short}, `:` `,long=`--${key}`,value=isBoolean?``:` <value>`,required=isOptional?``:` (required)`,defaultValue=zodType._def?.defaultValue,defaultStr=defaultValue===void 0?``:`(default: ${JSON.stringify(defaultValue)})`,description=meta?.description||``;console.log(` ${colors.cyan(short+long+value)}\t\t${description} ${colors.dim(required+defaultStr)}`)}}}async function loadCommands(commandsDir,commands,aliases){let commandFiles=scanCommands(commandsDir);for(let filePath of commandFiles)try{let command=(await import(filePath)).default;if(command&&typeof command==`object`&&`run`in command){let commandName=pathToCommandName(filePath,commandsDir);if(commands.set(commandName,command),command.aliases)for(let alias of command.aliases)aliases.set(alias,commandName)}}catch(error){console.warn(colors.yellow(`Warning: Could not load command from ${filePath}: ${error instanceof Error?error.message:String(error)}`))}}async function defineCli(opts){let commands=new Map,aliases=new Map;for(let[name,command]of Object.entries(BUILTIN_COMMANDS))if(commands.set(name,command),command.aliases)for(let alias of command.aliases)aliases.set(alias,name);return await loadCommands(opts.commandsDir,commands,aliases),await loadEvents({container:opts.container}),DBOS.setConfig({name:opts.container.config.APP_NAME,runAdminServer:!1,systemDatabaseUrl:opts.container.worker.dbUrl}),await loadWorkflows({container:opts.container,dbos:DBOS}),{async run(args=process.argv.slice(2)){let[cmdName,...cmdArgs]=args;if(!cmdName||cmdName===`--help`||cmdName===`-h`){showHelp(opts.container,commands);return}let resolvedName=aliases.get(cmdName)||cmdName,command=commands.get(resolvedName);if(command||(console.error(colors.red(`Unknown command: ${cmdName}\n`)),showHelp(opts.container,commands),process.exit(1)),cmdArgs.includes(`--help`)||cmdArgs.includes(`-h`)){showCommandHelp(resolvedName,command);return}try{let{args:parsedArgs,options}=await parseCommand(cmdArgs,command),ctx=defineCommandContext(parsedArgs,options,opts.container);await command.run(ctx)}catch(error){error instanceof Error&&(console.error(colors.red(`Error:`),error.message),(error.message.includes(`argument`)||error.message.includes(`Invalid arguments`))&&(console.log(),console.log(`Run '${colors.cyan(`${resolvedName} --help`)}' to see usage information.`))),process.exit(1)}},showHelp(){showHelp(opts.container,commands)},showCommandHelp(command){showCommandHelp(Array.from(commands.entries()).find(([_,cmd])=>cmd===command)?.[0]||`unknown`,command)}}}const require$1=createRequire(import.meta.url),{GlobalLogger}=require$1(join(dirname(dirname(dirname(require$1.resolve(`@dbos-inc/dbos-sdk`)))),`dist/src/telemetry/logs`));async function main(){let{defineContainer}=await import(join(process.cwd(),APPOS_DIR,`main.ts`)),container=await defineContainer();GlobalLogger.prototype.info=(logEntry,metadata)=>{if(typeof logEntry==`string`){if(logEntry.startsWith(`Initializing DBOS`)||logEntry.startsWith(`System Database URL:`)||logEntry.startsWith(`Executor ID:`)||logEntry.startsWith(`Application version:`)||logEntry.startsWith(`No workflows to recover from application`)||logEntry.startsWith(`DBOS launched!`))return;container.logger.info(metadata,logEntry)}else container.logger.info(metadata,JSON.stringify(logEntry))},await(await defineCli({container,commandsDir:join(process.cwd(),APPOS_DIR,COMMANDS_DIR)})).run(process.argv.slice(2))}try{await main()}catch(err){console.error(err),process.exit(1)}export{};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineWorkflow as e}from"
|
|
1
|
+
import{defineWorkflow as e}from"./workflow.mjs";import t from"zod";import{join as n}from"node:path";import{ALL_FORMATS as r,BlobSource as i,Input as a}from"mediabunny";import o from"sharp";const s=e({input:t.object({blobId:t.string()}),async run({container:e,input:{blobId:t},step:s}){let c=await s(`fetch-blob`,async()=>e.storage.primary.getBlob(t));if(!c)throw Error(`Blob ${t} not found`);let l=await s(`download-blob`,async()=>e.storage.primary.downloadBlob(t));if(!l)throw Error(`Failed to download blob ${t}`);let u={};return c.contentType?.startsWith(`image/`)?u=await s(`extract-image-metadata`,async()=>{let e=await o(l).metadata();return{width:e.width,height:e.height,format:e.format,hasAlpha:e.hasAlpha,space:e.space}}):c.contentType?.startsWith(`video/`)||c.contentType?.startsWith(`audio/`)?u=await s(`extract-media-metadata`,async()=>{let e=new Uint8Array(l),t=new a({source:new i(new Blob([e],{type:c.contentType||`video/mp4`})),formats:r}),n=await t.computeDuration(),o=await t.getMetadataTags(),s={},u={},d=!1,f=!1;try{let e=await t.getPrimaryVideoTrack();if(e){d=!0;let t=e.displayWidth&&e.displayHeight?e.displayWidth/e.displayHeight:null;s={width:e.displayWidth,height:e.displayHeight,rotation:e.rotation,angle:e.rotation,displayAspectRatio:t}}}catch{}try{let e=await t.getPrimaryAudioTrack();e&&(f=!0,u={sampleRate:e.sampleRate,channels:e.numberOfChannels})}catch{}return{duration:n,video:d,audio:f,...s,...u,tags:o}}):c.contentType===`application/pdf`&&(u=await s(`extract-pdf-metadata`,async()=>{try{let e=await import(`pdfjs-dist/legacy/build/pdf.mjs`),t=`${n(process.cwd(),`node_modules/pdfjs-dist/standard_fonts`)}/`,r=await e.getDocument({data:new Uint8Array(l),standardFontDataUrl:t}).promise,i=await r.getMetadata(),a=(await r.getPage(1)).getViewport({scale:1}),o=i.info;return{pageCount:r.numPages,width:a.width,height:a.height,title:o?.Title||null,author:o?.Author||null,subject:o?.Subject||null,keywords:o?.Keywords||null,creator:o?.Creator||null,producer:o?.Producer||null,creationDate:o?.CreationDate||null,modificationDate:o?.ModDate||null,pdfVersion:o?.PDFFormatVersion||null}}catch(n){return e.logger.error({error:n,errorMessage:n instanceof Error?n.message:String(n),errorStack:n instanceof Error?n.stack:void 0,errorCode:n?.code,blobId:t},`Failed to extract PDF metadata`),{error:`Failed to extract PDF metadata`,errorMessage:n instanceof Error?n.message:String(n)}}})),await s(`save-metadata`,async()=>{await e.storage.primary.updateBlobMetadata(t,{...u,analyzed:!0})}),e.logger.info({blobId:t,metadata:u},`Metadata extracted`),{...u,analyzed:!0}}});export{s as extractBlobMetadata};
|
|
@@ -1,41 +1,9 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import "
|
|
1
|
+
import "./workflow.mjs";
|
|
2
|
+
import "./container.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
5
|
//#region src/api/workflows/generate-image-variant.d.ts
|
|
6
|
-
|
|
7
|
-
* Resize options schema for image transformations.
|
|
8
|
-
*/
|
|
9
|
-
declare const resizeSchema: z.ZodObject<{
|
|
10
|
-
width: z.ZodOptional<z.ZodNumber>;
|
|
11
|
-
height: z.ZodOptional<z.ZodNumber>;
|
|
12
|
-
fit: z.ZodOptional<z.ZodEnum<{
|
|
13
|
-
fill: "fill";
|
|
14
|
-
cover: "cover";
|
|
15
|
-
contain: "contain";
|
|
16
|
-
inside: "inside";
|
|
17
|
-
outside: "outside";
|
|
18
|
-
}>>;
|
|
19
|
-
position: z.ZodOptional<z.ZodEnum<{
|
|
20
|
-
left: "left";
|
|
21
|
-
right: "right";
|
|
22
|
-
top: "top";
|
|
23
|
-
"right top": "right top";
|
|
24
|
-
"right bottom": "right bottom";
|
|
25
|
-
bottom: "bottom";
|
|
26
|
-
"left bottom": "left bottom";
|
|
27
|
-
"left top": "left top";
|
|
28
|
-
centre: "centre";
|
|
29
|
-
}>>;
|
|
30
|
-
kernel: z.ZodOptional<z.ZodEnum<{
|
|
31
|
-
nearest: "nearest";
|
|
32
|
-
linear: "linear";
|
|
33
|
-
cubic: "cubic";
|
|
34
|
-
mitchell: "mitchell";
|
|
35
|
-
lanczos2: "lanczos2";
|
|
36
|
-
lanczos3: "lanczos3";
|
|
37
|
-
}>>;
|
|
38
|
-
}, z.core.$strip>;
|
|
6
|
+
|
|
39
7
|
/**
|
|
40
8
|
* Image transformations schema.
|
|
41
9
|
* Supports resize, rotate, flip, flop, sharpen, blur, grayscale, format conversion.
|
|
@@ -91,9 +59,5 @@ declare const transformationsSchema: z.ZodObject<{
|
|
|
91
59
|
* Types for image transformations.
|
|
92
60
|
*/
|
|
93
61
|
type ImageTransformations = z.infer<typeof transformationsSchema>;
|
|
94
|
-
/**
|
|
95
|
-
* Types for resize options.
|
|
96
|
-
*/
|
|
97
|
-
type ResizeOptions = z.infer<typeof resizeSchema>;
|
|
98
62
|
//#endregion
|
|
99
|
-
export { ImageTransformations,
|
|
63
|
+
export { ImageTransformations, transformationsSchema };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineWorkflow as e}from"
|
|
1
|
+
import{defineWorkflow as e}from"./workflow.mjs";import{z as t}from"zod";import n from"sharp";const r=t.object({width:t.number().optional(),height:t.number().optional(),fit:t.enum([`cover`,`contain`,`fill`,`inside`,`outside`]).optional(),position:t.enum([`top`,`right top`,`right`,`right bottom`,`bottom`,`left bottom`,`left`,`left top`,`centre`]).optional(),kernel:t.enum([`nearest`,`linear`,`cubic`,`mitchell`,`lanczos2`,`lanczos3`]).optional()}),i=t.object({resize:r.optional(),rotate:t.number().optional(),flip:t.boolean().optional(),flop:t.boolean().optional(),sharpen:t.boolean().optional(),blur:t.number().optional(),grayscale:t.boolean().optional(),format:t.enum([`jpeg`,`png`,`webp`,`avif`,`gif`]).optional(),quality:t.number().min(1).max(100).optional(),preview:t.literal(!0).optional()}),a=e({input:t.object({blobId:t.string(),transformations:i}),async run({container:e,input:{blobId:t,transformations:r},step:i}){if(!await i(`fetch-blob`,async()=>e.storage.primary.getBlob(t)))throw Error(`Blob ${t} not found`);let a=await i(`download-blob`,async()=>e.storage.primary.downloadBlob(t));if(!a)throw Error(`Failed to download blob ${t}`);let o=await i(`apply-transformations`,async()=>{let e=n(a);return r.resize&&(e=e.resize({width:r.resize.width,height:r.resize.height,fit:r.resize.fit,position:r.resize.position,kernel:r.resize.kernel})),r.rotate!==void 0&&(e=e.rotate(r.rotate)),r.flip&&(e=e.flip()),r.flop&&(e=e.flop()),r.sharpen&&(e=e.sharpen()),r.blur!==void 0&&(e=e.blur(r.blur)),r.grayscale&&(e=e.grayscale()),r.format&&(e=e.toFormat(r.format,{quality:r.quality})),e.toBuffer()}),s=await i(`store-variant`,async()=>e.storage.primary.createVariant(t,r,o));return e.logger.info({blobId:t,variantId:s.id},`Image variant generated`),s}});export{a as generateImageVariant};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineWorkflow as e}from"
|
|
1
|
+
import{defineWorkflow as e}from"./workflow.mjs";import t from"zod";import{join as n}from"node:path";import r from"sharp";import{spawn as i}from"node:child_process";import{createCanvas as a}from"canvas";const o=e({input:t.object({blobId:t.string(),timeInSeconds:t.number().optional()}),async run({container:e,input:{blobId:t,timeInSeconds:o=1},step:s}){let c=await s(`fetch-blob`,async()=>e.storage.primary.getBlob(t));if(!c)throw Error(`Blob ${t} not found`);let l=await s(`download-blob`,async()=>e.storage.primary.downloadBlob(t));if(!l)throw Error(`Failed to download blob ${t}`);let u=null;if(c.contentType?.startsWith(`video/`))u=await s(`generate-video-preview`,async()=>new Promise((n,a)=>{try{let s=i(`ffmpeg`,[`-i`,`pipe:0`,`-ss`,o.toString(),`-frames:v`,`1`,`-f`,`image2pipe`,`-c:v`,`png`,`pipe:1`]),c=[],u=[];s.stdout.on(`data`,e=>{c.push(e)}),s.stderr.on(`data`,e=>{u.push(e)}),s.on(`close`,async i=>{if(i===0)try{n(await r(Buffer.concat(c)).jpeg({quality:80}).toBuffer())}catch(n){e.logger.error({error:n,blobId:t},`Failed to convert video frame to JPEG`),a(n)}else{let n=Buffer.concat(u).toString(),r=Error(`FFmpeg exited with code ${i}: ${n}`);e.logger.error({error:r,blobId:t,code:i,stderr:n},`Failed to generate video preview`),a(r)}}),s.on(`error`,n=>{e.logger.error({error:n,blobId:t},`Failed to spawn FFmpeg process`),a(n)}),s.stdin.on(`error`,n=>{n.code!==`EPIPE`&&e.logger.error({error:n,blobId:t},`Failed to write to FFmpeg stdin`)}),s.stdin.write(l),s.stdin.end()}catch(n){e.logger.error({error:n,blobId:t},`Failed to generate video preview`),a(n)}}));else if(c.contentType===`application/pdf`)u=await s(`generate-pdf-preview`,async()=>{try{let e=await import(`pdfjs-dist/legacy/build/pdf.mjs`),t=`${n(process.cwd(),`node_modules/pdfjs-dist/standard_fonts`)}/`,i=await(await e.getDocument({data:new Uint8Array(l),standardFontDataUrl:t}).promise).getPage(1),o=i.getViewport({scale:2}),s=a(o.width,o.height),c=s.getContext(`2d`);return await i.render({canvasContext:c,viewport:o,canvas:s}).promise,await r(s.toBuffer(`image/png`)).resize(800,800,{fit:`inside`,withoutEnlargement:!0}).jpeg({quality:85}).toBuffer()}catch(n){throw e.logger.error({error:n,errorMessage:n instanceof Error?n.message:String(n),errorStack:n instanceof Error?n.stack:void 0,errorCode:n?.code,blobId:t},`Failed to generate PDF preview`),n}});else if(c.contentType?.startsWith(`image/`))u=await s(`generate-image-preview`,async()=>await r(l).resize(800,800,{fit:`inside`,withoutEnlargement:!0}).jpeg({quality:85}).toBuffer());else throw Error(`Preview generation not supported for content type: ${c.contentType}`);let d=await s(`store-preview`,async()=>await e.storage.primary.createVariant(t,{preview:!0},u));return e.logger.info({blobId:t,previewId:d.id,contentType:c.contentType},`Preview generated`),d}});export{o as generatePreview};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineWorkflow as e}from"
|
|
1
|
+
import{defineWorkflow as e}from"./workflow.mjs";import t from"zod";const n=e({input:t.object({attachmentIds:t.array(t.string()).min(1)}),async run({container:e,input:{attachmentIds:t},step:n}){let r=await n(`fetch-attachments`,async()=>(await e.storage.primary.getAttachmentsByIds(t)).filter(e=>e.blob!==null).map(e=>({attachmentId:e.id,blobId:e.blob.id})));return await n(`delete-attachments`,async()=>{for(let{attachmentId:t}of r)await e.storage.primary.deleteAttachment(t)}),await n(`delete-blobs`,async()=>{for(let{blobId:t}of r)await e.storage.primary.deleteBlob(t)}),e.logger.info({attachmentIds:t,blobCount:r.length},`Attachments and blobs purged`),{purgedCount:r.length}}});export{n as purgeAttachment};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineAuthSchema as e}from"
|
|
1
|
+
import{defineAuthSchema as e}from"./auth-schema.mjs";import{defineScheduledWorkflow as t}from"./workflow.mjs";import{lt as n}from"drizzle-orm";const r=e();function i(e=`0 0 * * *`){return t({crontab:e,async run({container:e,step:t,scheduledTime:i}){let a=e.auth.auditLog?.retentionDays??90,o=new Date(i);o.setDate(o.getDate()-a);let s=o.toISOString(),c=await t(`delete-old-logs`,async()=>{let{auditLogs:t}=r.tables;return(await e.db.primary.delete(t).where(n(t.createdAt,s)).returning({id:t.id})).length});e.logger.info({deletedCount:c,retentionDays:a,cutoffDate:s},`Audit log purge completed`)}})}export{i as definePurgeAuditLogs};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineScheduledWorkflow as e}from"
|
|
1
|
+
import{defineScheduledWorkflow as e}from"./workflow.mjs";function t(t=`0 0 * * *`){return e({crontab:t,async run({container:e,step:t}){let n=new Date(Date.now()-2880*60*1e3).toISOString(),r=await t(`fetch-unattached-blobs`,async()=>e.storage.primary.getUnattachedBlobs({olderThan:n})),i=await t(`fetch-pending-blobs`,async()=>e.storage.primary.getPendingBlobs(n)),a=[...r,...i],o=0;for(let n of a)await t(`delete-blob`,async()=>{await e.storage.primary.deleteBlob(n.id),o++});e.logger.info({purgedCount:o,unattachedCount:r.length,pendingCount:i.length},`Orphaned blobs purged`)}})}export{t as definePurgeUnattachedBlobs};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineAuthSchema as e}from"
|
|
1
|
+
import{defineAuthSchema as e}from"./auth-schema.mjs";import{dbChangesEvent as t}from"./event.mjs";import{defineWorkflow as n}from"./workflow.mjs";import{z as r}from"zod";const i=e(),a=r.object({changes:r.array(r.object({_table:r.string(),old:r.record(r.string(),r.unknown()).nullable(),new:r.record(r.string(),r.unknown()).nullable()})),dbName:r.string(),organizationId:r.string().nullable(),requestId:r.string(),sessionId:r.string().nullable(),userId:r.string().nullable()});function o(e){return e.old===null?`INSERT`:e.new===null?`DELETE`:`UPDATE`}const s=n({input:a,async run({container:e,step:n,input:r}){let{dbName:a,changes:s,organizationId:c,userId:l,sessionId:u,requestId:d}=r;if(s.length===0)return{processed:0,audited:0,published:0};let f=new Date().toISOString(),p=0,m=0;for(let r of s){let s=r._table,h=o(r),g=`${a}.${s}`;e.auth.shouldAudit(g)&&(await n(`audit:${g}`,async()=>{await e.db.primary.insert(i.tables.auditLogs).values({tableName:g,action:h,oldData:r.old,newData:r.new,organizationId:c,userId:l,sessionId:u,requestId:d,createdAt:f})}),p++),await n(`event:${g}`,async()=>{await t.emit({action:h,oldData:r.old,newData:r.new,organizationId:c,tableName:g,timestamp:f,userId:l})}),m++}return{processed:s.length,audited:p,published:m}}});export{s as trackDbChanges};
|
|
@@ -239,14 +239,14 @@ declare class StorageService<TDiskNames extends string = string, TTableNames ext
|
|
|
239
239
|
blobId: string;
|
|
240
240
|
blob: {
|
|
241
241
|
id: string;
|
|
242
|
-
createdAt: string;
|
|
243
242
|
key: string;
|
|
244
|
-
metadata: unknown;
|
|
245
243
|
filename: string;
|
|
246
244
|
contentType: string | null;
|
|
245
|
+
metadata: unknown;
|
|
247
246
|
serviceName: string;
|
|
248
247
|
byteSize: number;
|
|
249
248
|
checksum: string | null;
|
|
249
|
+
createdAt: string;
|
|
250
250
|
} | null;
|
|
251
251
|
}[]>;
|
|
252
252
|
/**
|
|
@@ -263,14 +263,14 @@ declare class StorageService<TDiskNames extends string = string, TTableNames ext
|
|
|
263
263
|
blobId: string;
|
|
264
264
|
blob: {
|
|
265
265
|
id: string;
|
|
266
|
-
createdAt: string;
|
|
267
266
|
key: string;
|
|
268
|
-
metadata: unknown;
|
|
269
267
|
filename: string;
|
|
270
268
|
contentType: string | null;
|
|
269
|
+
metadata: unknown;
|
|
271
270
|
serviceName: string;
|
|
272
271
|
byteSize: number;
|
|
273
272
|
checksum: string | null;
|
|
273
|
+
createdAt: string;
|
|
274
274
|
} | null;
|
|
275
275
|
}[]>;
|
|
276
276
|
/**
|