@shipfox/api-server 9.2.0 → 9.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.
@@ -1,2 +1,2 @@
1
1
  $ shipfox-swc
2
- Successfully compiled: 7 files with swc (120.22ms)
2
+ Successfully compiled: 7 files with swc (307.75ms)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # @shipfox/api-server
2
2
 
3
+ ## 9.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c8963f9: Expose an Auth module factory on `defaultModules()` for application-specific composition.
8
+
9
+ ### Patch Changes
10
+
11
+ - 4425c6d: Adds independent stdout and file log thresholds and enables standard OpenTelemetry Pino log export in the API instrumentation preload.
12
+ - Updated dependencies [10cf63c]
13
+ - Updated dependencies [c0046d3]
14
+ - Updated dependencies [4425c6d]
15
+ - Updated dependencies [6017e56]
16
+ - Updated dependencies [7b6a409]
17
+ - @shipfox/api-auth@9.3.0
18
+ - @shipfox/api-auth-dto@9.3.0
19
+ - @shipfox/node-opentelemetry@0.6.3
20
+ - @shipfox/api-triggers@9.3.0
21
+ - @shipfox/api-workflows@9.3.0
22
+ - @shipfox/api-workflows-dto@9.3.0
23
+ - @shipfox/api-workspaces@9.3.0
24
+ - @shipfox/api-workspaces-dto@9.3.0
25
+ - @shipfox/annotations@9.3.0
26
+ - @shipfox/api-logs@9.3.0
27
+ - @shipfox/api-runners@9.3.0
28
+ - @shipfox/api-agent@9.3.0
29
+ - @shipfox/api-definitions@9.3.0
30
+ - @shipfox/api-dispatcher@9.3.0
31
+ - @shipfox/api-email-challenges@1.1.5
32
+ - @shipfox/api-integration-core@9.3.0
33
+ - @shipfox/api-projects@9.3.0
34
+ - @shipfox/api-secrets@9.3.0
35
+ - @shipfox/node-fastify@0.3.4
36
+ - @shipfox/node-module@1.0.3
37
+
3
38
  ## 9.2.0
4
39
 
5
40
  ### Patch Changes
package/README.md CHANGED
@@ -5,10 +5,11 @@ Runs a Shipfox API server.
5
5
  ## What it does
6
6
 
7
7
  - **`defaultModules()`**: Returns the standard module list.
8
+ - **`DefaultAuthModuleFactory`**: Builds the Auth module with the composed Workspaces client.
8
9
  - **`createServer()`**: Builds an API server. The caller owns process signals.
9
10
  - **`runServer()`**: Starts the server. It listens for SIGTERM and SIGINT.
10
11
  - **`createLoginMethodsRoute()`**: Builds the public login-method catalog route. `createServer` mounts it automatically.
11
- - **Instrumentation preload**: Starts metrics early. Load it before feature modules.
12
+ - **Instrumentation preload**: Starts metrics and optional logs early. Load it before feature modules.
12
13
 
13
14
  ## Installation
14
15
 
@@ -33,6 +34,18 @@ const modules = await defaultModules({
33
34
  });
34
35
  ```
35
36
 
37
+ To provide an Auth module with an application-specific signup policy, use the
38
+ Auth factory. Its returned module is included in the standard composition and
39
+ its inter-module presentations are registered with the same transport:
40
+
41
+ ```ts
42
+ import {createAuthModule} from '@shipfox/api-auth';
43
+
44
+ const modules = await defaultModules({
45
+ authModule: ({workspaces}) => createAuthModule({workspaces, signupPolicy}),
46
+ });
47
+ ```
48
+
36
49
  Load the instrumentation entry before feature modules:
37
50
 
38
51
  ```sh
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { type DefaultModulesExtension, type DefaultModulesOptions, type DefaultRunnersModuleFactory, defaultModules, } from './modules.js';
1
+ export { type DefaultAuthModuleFactory, type DefaultModulesExtension, type DefaultModulesOptions, type DefaultRunnersModuleFactory, defaultModules, } from './modules.js';
2
2
  export { createLoginMethodsRoute } from './routes/login-methods.js';
3
3
  export type { CreateServerOptions, RunServerOptions, ServerHandle } from './server.js';
4
4
  export { createServer, runServer } from './server.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAC,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AACrF,OAAO,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAC,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AACrF,OAAO,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,aAAa,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n type DefaultModulesExtension,\n type DefaultModulesOptions,\n type DefaultRunnersModuleFactory,\n defaultModules,\n} from './modules.js';\nexport {createLoginMethodsRoute} from './routes/login-methods.js';\nexport type {CreateServerOptions, RunServerOptions, ServerHandle} from './server.js';\nexport {createServer, runServer} from './server.js';\n"],"names":["defaultModules","createLoginMethodsRoute","createServer","runServer"],"mappings":"AAAA,SAIEA,cAAc,QACT,eAAe;AACtB,SAAQC,uBAAuB,QAAO,4BAA4B;AAElE,SAAQC,YAAY,EAAEC,SAAS,QAAO,cAAc"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n type DefaultAuthModuleFactory,\n type DefaultModulesExtension,\n type DefaultModulesOptions,\n type DefaultRunnersModuleFactory,\n defaultModules,\n} from './modules.js';\nexport {createLoginMethodsRoute} from './routes/login-methods.js';\nexport type {CreateServerOptions, RunServerOptions, ServerHandle} from './server.js';\nexport {createServer, runServer} from './server.js';\n"],"names":["defaultModules","createLoginMethodsRoute","createServer","runServer"],"mappings":"AAAA,SAKEA,cAAc,QACT,eAAe;AACtB,SAAQC,uBAAuB,QAAO,4BAA4B;AAElE,SAAQC,YAAY,EAAEC,SAAS,QAAO,cAAc"}
@@ -10,7 +10,8 @@ await startInstanceInstrumentation({
10
10
  fastify: true,
11
11
  http: true,
12
12
  pg: true,
13
- awsSdk: true
13
+ awsSdk: true,
14
+ pino: true
14
15
  }
15
16
  });
16
17
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/instrumentation.ts"],"sourcesContent":["import {createRequire} from 'node:module';\nimport {startInstanceInstrumentation} from '@shipfox/node-opentelemetry';\n\nconst {version} = createRequire(import.meta.url)('../package.json') as {version: string};\n\n// The metrics API has no proxy meter: instruments created before this preload\n// completes bind to a no-op provider for the process lifetime.\nawait startInstanceInstrumentation({\n serviceName: 'api',\n serviceVersion: version,\n instrumentations: {fastify: true, http: true, pg: true, awsSdk: true},\n});\n"],"names":["createRequire","startInstanceInstrumentation","version","url","serviceName","serviceVersion","instrumentations","fastify","http","pg","awsSdk"],"mappings":"AAAA,SAAQA,aAAa,QAAO,cAAc;AAC1C,SAAQC,4BAA4B,QAAO,8BAA8B;AAEzE,MAAM,EAACC,OAAO,EAAC,GAAGF,cAAc,YAAYG,GAAG,EAAE;AAEjD,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAMF,6BAA6B;IACjCG,aAAa;IACbC,gBAAgBH;IAChBI,kBAAkB;QAACC,SAAS;QAAMC,MAAM;QAAMC,IAAI;QAAMC,QAAQ;IAAI;AACtE"}
1
+ {"version":3,"sources":["../src/instrumentation.ts"],"sourcesContent":["import {createRequire} from 'node:module';\nimport {startInstanceInstrumentation} from '@shipfox/node-opentelemetry';\n\nconst {version} = createRequire(import.meta.url)('../package.json') as {version: string};\n\n// The metrics API has no proxy meter: instruments created before this preload\n// completes bind to a no-op provider for the process lifetime.\nawait startInstanceInstrumentation({\n serviceName: 'api',\n serviceVersion: version,\n instrumentations: {fastify: true, http: true, pg: true, awsSdk: true, pino: true},\n});\n"],"names":["createRequire","startInstanceInstrumentation","version","url","serviceName","serviceVersion","instrumentations","fastify","http","pg","awsSdk","pino"],"mappings":"AAAA,SAAQA,aAAa,QAAO,cAAc;AAC1C,SAAQC,4BAA4B,QAAO,8BAA8B;AAEzE,MAAM,EAACC,OAAO,EAAC,GAAGF,cAAc,YAAYG,GAAG,EAAE;AAEjD,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAMF,6BAA6B;IACjCG,aAAa;IACbC,gBAAgBH;IAChBI,kBAAkB;QAACC,SAAS;QAAMC,MAAM;QAAMC,IAAI;QAAMC,QAAQ;QAAMC,MAAM;IAAI;AAClF"}
package/dist/modules.d.ts CHANGED
@@ -4,9 +4,13 @@ import { type WorkspacesInterModuleClient } from '@shipfox/api-workspaces-dto/in
4
4
  import type { ShipfoxModule } from '@shipfox/node-module';
5
5
  export interface DefaultModulesOptions {
6
6
  webhookDeliverySource?: WebhookDeliverySource | undefined;
7
+ authModule?: DefaultAuthModuleFactory | undefined;
7
8
  runnersModule?: DefaultRunnersModuleFactory | undefined;
8
9
  extension?: DefaultModulesExtension | undefined;
9
10
  }
11
+ export type DefaultAuthModuleFactory = (options: {
12
+ workspaces: WorkspacesInterModuleClient;
13
+ }) => ShipfoxModule;
10
14
  export type DefaultRunnersModuleFactory = (options: {
11
15
  auth: AuthInterModuleClient;
12
16
  }) => ShipfoxModule;
@@ -1 +1 @@
1
- {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,oCAAoC,CAAC;AAK5C,OAAO,EAA4B,KAAK,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AAapG,OAAO,EACL,KAAK,2BAA2B,EAEjC,MAAM,0CAA0C,CAAC;AAGlD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAOxD,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC1D,aAAa,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACxD,SAAS,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE;IAAC,IAAI,EAAE,qBAAqB,CAAA;CAAC,KAAK,aAAa,CAAC;AACpG,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,UAAU,EAAE,2BAA2B,CAAC;CACzC,KAAK,aAAa,EAAE,CAAC;AAEtB,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,EAAE,CAAC,CAgJ1B"}
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,oCAAoC,CAAC;AAK5C,OAAO,EAA4B,KAAK,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AAapG,OAAO,EACL,KAAK,2BAA2B,EAEjC,MAAM,0CAA0C,CAAC;AAGlD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAOxD,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC1D,UAAU,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAClD,aAAa,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACxD,SAAS,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE;IAC/C,UAAU,EAAE,2BAA2B,CAAC;CACzC,KAAK,aAAa,CAAC;AACpB,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,EAAE;IAAC,IAAI,EAAE,qBAAqB,CAAA;CAAC,KAAK,aAAa,CAAC;AACpG,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,UAAU,EAAE,2BAA2B,CAAC;CACzC,KAAK,aAAa,EAAE,CAAC;AAEtB,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,EAAE,CAAC,CAiJ1B"}
package/dist/modules.js CHANGED
@@ -140,7 +140,7 @@ export async function defaultModules(options = {}) {
140
140
  }) ?? [];
141
141
  const modules = [
142
142
  emailChallengesModule,
143
- createAuthModule({
143
+ (options.authModule ?? createAuthModule)({
144
144
  workspaces: workspacesClient
145
145
  }),
146
146
  workspacesModule,
@@ -159,6 +159,7 @@ export async function defaultModules(options = {}) {
159
159
  projects: projectsClient,
160
160
  runners: runnersClient,
161
161
  secrets: secretsClient,
162
+ workspaces: workspacesClient,
162
163
  integrations: integrationsClient
163
164
  }),
164
165
  annotationsModule,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules.ts"],"sourcesContent":["import {annotationsModule} from '@shipfox/annotations';\nimport {annotationsInterModuleContract} from '@shipfox/annotations-dto/inter-module';\nimport {createAgentModule} from '@shipfox/api-agent';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport {createAuthModule} from '@shipfox/api-auth';\nimport {config as authConfig} from '@shipfox/api-auth/config';\nimport {\n type AuthInterModuleClient,\n authInterModuleContract,\n} from '@shipfox/api-auth-dto/inter-module';\nimport {createDefinitionsModule} from '@shipfox/api-definitions';\nimport {definitionsInterModuleContract} from '@shipfox/api-definitions-dto/inter-module';\nimport {dispatcherModule} from '@shipfox/api-dispatcher';\nimport {emailChallengesModule} from '@shipfox/api-email-challenges';\nimport {createIntegrationsContext, type WebhookDeliverySource} from '@shipfox/api-integration-core';\nimport {integrationsInterModuleContract} from '@shipfox/api-integration-core-dto/inter-module';\nimport {createLogsModule} from '@shipfox/api-logs';\nimport {createProjectsModule} from '@shipfox/api-projects';\nimport {projectsInterModuleContract} from '@shipfox/api-projects-dto/inter-module';\nimport {createRunnersModule} from '@shipfox/api-runners';\nimport {runnersInterModuleContract} from '@shipfox/api-runners-dto/inter-module';\nimport {createSecretsModule} from '@shipfox/api-secrets';\nimport {secretsInterModuleContract} from '@shipfox/api-secrets-dto/inter-module';\nimport {createTriggersModule} from '@shipfox/api-triggers';\nimport {createWorkflowsModule} from '@shipfox/api-workflows';\nimport {workflowsInterModuleContract} from '@shipfox/api-workflows-dto/inter-module';\nimport {workspacesModule} from '@shipfox/api-workspaces';\nimport {\n type WorkspacesInterModuleClient,\n workspacesInterModuleContract,\n} from '@shipfox/api-workspaces-dto/inter-module';\nimport {reportError} from '@shipfox/node-error-monitoring';\nimport {durationToSeconds} from '@shipfox/node-jwt';\nimport type {ShipfoxModule} from '@shipfox/node-module';\nimport {\n createInMemoryInterModuleTransport,\n registerInterModulePresentations,\n} from '@shipfox/node-module/inter-module';\nimport {logger} from '@shipfox/node-opentelemetry';\n\nexport interface DefaultModulesOptions {\n webhookDeliverySource?: WebhookDeliverySource | undefined;\n runnersModule?: DefaultRunnersModuleFactory | undefined;\n extension?: DefaultModulesExtension | undefined;\n}\n\nexport type DefaultRunnersModuleFactory = (options: {auth: AuthInterModuleClient}) => ShipfoxModule;\nexport type DefaultModulesExtension = (options: {\n workspaces: WorkspacesInterModuleClient;\n}) => ShipfoxModule[];\n\nexport async function defaultModules(\n options: DefaultModulesOptions = {},\n): Promise<ShipfoxModule[]> {\n const interModuleTransport = createInMemoryInterModuleTransport({\n reportInternalError: (error, context) => {\n logger().error(\n {err: error, module: context.module, method: context.method, phase: context.phase},\n 'Inter-module call failed unexpectedly',\n );\n reportError(error, {\n boundary: 'inter-module',\n operation: `${context.module}.${context.method}`,\n tags: {module: context.module, method: context.method, phase: context.phase},\n });\n },\n });\n const workflowsClient = interModuleTransport.createClient(workflowsInterModuleContract);\n const authClient = interModuleTransport.createClient(authInterModuleContract);\n const agentClient = interModuleTransport.createClient(agentInterModuleContract);\n const runnersClient = interModuleTransport.createClient(runnersInterModuleContract);\n const projectsClient = interModuleTransport.createClient(projectsInterModuleContract);\n const definitionsClient = interModuleTransport.createClient(definitionsInterModuleContract);\n const annotationsClient = interModuleTransport.createClient(annotationsInterModuleContract);\n const secretsClient = interModuleTransport.createClient(secretsInterModuleContract);\n const workspacesClient = interModuleTransport.createClient(workspacesInterModuleContract);\n const integrationsClient = interModuleTransport.createClient(integrationsInterModuleContract);\n const integrations = await createIntegrationsContext({\n workspaces: workspacesClient,\n secrets: {\n deleteSecrets: async (params) => (await secretsClient.deleteSecrets(params)).deleted,\n linear: {\n getSecret: async (params) =>\n (\n await secretsClient.getSecret({\n ...params,\n namespace: `system/integrations/linear/${params.namespace}`,\n })\n ).value,\n setSecrets: async (params) => {\n const {editedBy, ...secretParams} = params;\n await secretsClient.setSecrets({\n ...secretParams,\n namespace: `system/integrations/linear/${secretParams.namespace}`,\n ...(editedBy === undefined ? {} : {editedBy}),\n });\n },\n deleteSecrets: async (params) =>\n (\n await secretsClient.deleteSecrets({\n ...params,\n namespace: `system/integrations/linear/${params.namespace}`,\n })\n ).deleted,\n },\n jira: {\n getSecret: async (params) =>\n (\n await secretsClient.getSecret({\n ...params,\n namespace: `system/integrations/jira/${params.namespace}`,\n })\n ).value,\n setSecrets: async (params) => {\n const {editedBy, ...secretParams} = params;\n await secretsClient.setSecrets({\n ...secretParams,\n namespace: `system/integrations/jira/${secretParams.namespace}`,\n ...(editedBy === undefined ? {} : {editedBy}),\n });\n },\n deleteSecrets: async (params) =>\n (\n await secretsClient.deleteSecrets({\n ...params,\n namespace: `system/integrations/jira/${params.namespace}`,\n })\n ).deleted,\n },\n slack: {\n getSecret: async (params) =>\n (\n await secretsClient.getSecret({\n ...params,\n namespace: `system/integrations/slack/${params.namespace}`,\n })\n ).value,\n setSecrets: async (params) => {\n const {editedBy, ...secretParams} = params;\n await secretsClient.setSecrets({\n ...secretParams,\n namespace: `system/integrations/slack/${secretParams.namespace}`,\n ...(editedBy === undefined ? {} : {editedBy}),\n });\n },\n deleteSecrets: async (params) =>\n (\n await secretsClient.deleteSecrets({\n ...params,\n namespace: `system/integrations/slack/${params.namespace}`,\n })\n ).deleted,\n },\n },\n agentTools: {workflows: workflowsClient},\n webhookDeliverySource: options.webhookDeliverySource,\n });\n const projectsModule = createProjectsModule({integrations: integrationsClient});\n const definitionsModule = createDefinitionsModule({\n projects: projectsClient,\n agent: agentClient,\n integrations: integrationsClient,\n });\n const extensionModules = options.extension?.({workspaces: workspacesClient}) ?? [];\n\n const modules = [\n emailChallengesModule,\n createAuthModule({workspaces: workspacesClient}),\n workspacesModule,\n createSecretsModule(projectsClient),\n createAgentModule({secrets: secretsClient}),\n integrations.module,\n projectsModule,\n definitionsModule,\n createWorkflowsModule({\n annotations: annotationsClient,\n agent: agentClient,\n definitions: definitionsClient,\n auth: authClient,\n projects: projectsClient,\n runners: runnersClient,\n secrets: secretsClient,\n integrations: integrationsClient,\n }),\n annotationsModule,\n (options.runnersModule ?? createRunnersModule)({auth: authClient}),\n createLogsModule({\n workflows: workflowsClient,\n jobLeaseTokenTtlSeconds: durationToSeconds(authConfig.AUTH_JOB_LEASE_TOKEN_EXPIRES_IN),\n }),\n createTriggersModule({workflows: workflowsClient}),\n dispatcherModule,\n ...extensionModules,\n ];\n registerInterModulePresentations({transport: interModuleTransport, modules});\n interModuleTransport.seal();\n return modules;\n}\n"],"names":["annotationsModule","annotationsInterModuleContract","createAgentModule","agentInterModuleContract","createAuthModule","config","authConfig","authInterModuleContract","createDefinitionsModule","definitionsInterModuleContract","dispatcherModule","emailChallengesModule","createIntegrationsContext","integrationsInterModuleContract","createLogsModule","createProjectsModule","projectsInterModuleContract","createRunnersModule","runnersInterModuleContract","createSecretsModule","secretsInterModuleContract","createTriggersModule","createWorkflowsModule","workflowsInterModuleContract","workspacesModule","workspacesInterModuleContract","reportError","durationToSeconds","createInMemoryInterModuleTransport","registerInterModulePresentations","logger","defaultModules","options","interModuleTransport","reportInternalError","error","context","err","module","method","phase","boundary","operation","tags","workflowsClient","createClient","authClient","agentClient","runnersClient","projectsClient","definitionsClient","annotationsClient","secretsClient","workspacesClient","integrationsClient","integrations","workspaces","secrets","deleteSecrets","params","deleted","linear","getSecret","namespace","value","setSecrets","editedBy","secretParams","undefined","jira","slack","agentTools","workflows","webhookDeliverySource","projectsModule","definitionsModule","projects","agent","extensionModules","extension","modules","annotations","definitions","auth","runners","runnersModule","jobLeaseTokenTtlSeconds","AUTH_JOB_LEASE_TOKEN_EXPIRES_IN","transport","seal"],"mappings":"AAAA,SAAQA,iBAAiB,QAAO,uBAAuB;AACvD,SAAQC,8BAA8B,QAAO,wCAAwC;AACrF,SAAQC,iBAAiB,QAAO,qBAAqB;AACrD,SAAQC,wBAAwB,QAAO,sCAAsC;AAC7E,SAAQC,gBAAgB,QAAO,oBAAoB;AACnD,SAAQC,UAAUC,UAAU,QAAO,2BAA2B;AAC9D,SAEEC,uBAAuB,QAClB,qCAAqC;AAC5C,SAAQC,uBAAuB,QAAO,2BAA2B;AACjE,SAAQC,8BAA8B,QAAO,4CAA4C;AACzF,SAAQC,gBAAgB,QAAO,0BAA0B;AACzD,SAAQC,qBAAqB,QAAO,gCAAgC;AACpE,SAAQC,yBAAyB,QAAmC,gCAAgC;AACpG,SAAQC,+BAA+B,QAAO,iDAAiD;AAC/F,SAAQC,gBAAgB,QAAO,oBAAoB;AACnD,SAAQC,oBAAoB,QAAO,wBAAwB;AAC3D,SAAQC,2BAA2B,QAAO,yCAAyC;AACnF,SAAQC,mBAAmB,QAAO,uBAAuB;AACzD,SAAQC,0BAA0B,QAAO,wCAAwC;AACjF,SAAQC,mBAAmB,QAAO,uBAAuB;AACzD,SAAQC,0BAA0B,QAAO,wCAAwC;AACjF,SAAQC,oBAAoB,QAAO,wBAAwB;AAC3D,SAAQC,qBAAqB,QAAO,yBAAyB;AAC7D,SAAQC,4BAA4B,QAAO,0CAA0C;AACrF,SAAQC,gBAAgB,QAAO,0BAA0B;AACzD,SAEEC,6BAA6B,QACxB,2CAA2C;AAClD,SAAQC,WAAW,QAAO,iCAAiC;AAC3D,SAAQC,iBAAiB,QAAO,oBAAoB;AAEpD,SACEC,kCAAkC,EAClCC,gCAAgC,QAC3B,oCAAoC;AAC3C,SAAQC,MAAM,QAAO,8BAA8B;AAanD,OAAO,eAAeC,eACpBC,UAAiC,CAAC,CAAC;IAEnC,MAAMC,uBAAuBL,mCAAmC;QAC9DM,qBAAqB,CAACC,OAAOC;YAC3BN,SAASK,KAAK,CACZ;gBAACE,KAAKF;gBAAOG,QAAQF,QAAQE,MAAM;gBAAEC,QAAQH,QAAQG,MAAM;gBAAEC,OAAOJ,QAAQI,KAAK;YAAA,GACjF;YAEFd,YAAYS,OAAO;gBACjBM,UAAU;gBACVC,WAAW,GAAGN,QAAQE,MAAM,CAAC,CAAC,EAAEF,QAAQG,MAAM,EAAE;gBAChDI,MAAM;oBAACL,QAAQF,QAAQE,MAAM;oBAAEC,QAAQH,QAAQG,MAAM;oBAAEC,OAAOJ,QAAQI,KAAK;gBAAA;YAC7E;QACF;IACF;IACA,MAAMI,kBAAkBX,qBAAqBY,YAAY,CAACtB;IAC1D,MAAMuB,aAAab,qBAAqBY,YAAY,CAACtC;IACrD,MAAMwC,cAAcd,qBAAqBY,YAAY,CAAC1C;IACtD,MAAM6C,gBAAgBf,qBAAqBY,YAAY,CAAC3B;IACxD,MAAM+B,iBAAiBhB,qBAAqBY,YAAY,CAAC7B;IACzD,MAAMkC,oBAAoBjB,qBAAqBY,YAAY,CAACpC;IAC5D,MAAM0C,oBAAoBlB,qBAAqBY,YAAY,CAAC5C;IAC5D,MAAMmD,gBAAgBnB,qBAAqBY,YAAY,CAACzB;IACxD,MAAMiC,mBAAmBpB,qBAAqBY,YAAY,CAACpB;IAC3D,MAAM6B,qBAAqBrB,qBAAqBY,YAAY,CAAChC;IAC7D,MAAM0C,eAAe,MAAM3C,0BAA0B;QACnD4C,YAAYH;QACZI,SAAS;YACPC,eAAe,OAAOC,SAAW,AAAC,CAAA,MAAMP,cAAcM,aAAa,CAACC,OAAM,EAAGC,OAAO;YACpFC,QAAQ;gBACNC,WAAW,OAAOH,SAChB,AACE,CAAA,MAAMP,cAAcU,SAAS,CAAC;wBAC5B,GAAGH,MAAM;wBACTI,WAAW,CAAC,2BAA2B,EAAEJ,OAAOI,SAAS,EAAE;oBAC7D,EAAC,EACDC,KAAK;gBACTC,YAAY,OAAON;oBACjB,MAAM,EAACO,QAAQ,EAAE,GAAGC,cAAa,GAAGR;oBACpC,MAAMP,cAAca,UAAU,CAAC;wBAC7B,GAAGE,YAAY;wBACfJ,WAAW,CAAC,2BAA2B,EAAEI,aAAaJ,SAAS,EAAE;wBACjE,GAAIG,aAAaE,YAAY,CAAC,IAAI;4BAACF;wBAAQ,CAAC;oBAC9C;gBACF;gBACAR,eAAe,OAAOC,SACpB,AACE,CAAA,MAAMP,cAAcM,aAAa,CAAC;wBAChC,GAAGC,MAAM;wBACTI,WAAW,CAAC,2BAA2B,EAAEJ,OAAOI,SAAS,EAAE;oBAC7D,EAAC,EACDH,OAAO;YACb;YACAS,MAAM;gBACJP,WAAW,OAAOH,SAChB,AACE,CAAA,MAAMP,cAAcU,SAAS,CAAC;wBAC5B,GAAGH,MAAM;wBACTI,WAAW,CAAC,yBAAyB,EAAEJ,OAAOI,SAAS,EAAE;oBAC3D,EAAC,EACDC,KAAK;gBACTC,YAAY,OAAON;oBACjB,MAAM,EAACO,QAAQ,EAAE,GAAGC,cAAa,GAAGR;oBACpC,MAAMP,cAAca,UAAU,CAAC;wBAC7B,GAAGE,YAAY;wBACfJ,WAAW,CAAC,yBAAyB,EAAEI,aAAaJ,SAAS,EAAE;wBAC/D,GAAIG,aAAaE,YAAY,CAAC,IAAI;4BAACF;wBAAQ,CAAC;oBAC9C;gBACF;gBACAR,eAAe,OAAOC,SACpB,AACE,CAAA,MAAMP,cAAcM,aAAa,CAAC;wBAChC,GAAGC,MAAM;wBACTI,WAAW,CAAC,yBAAyB,EAAEJ,OAAOI,SAAS,EAAE;oBAC3D,EAAC,EACDH,OAAO;YACb;YACAU,OAAO;gBACLR,WAAW,OAAOH,SAChB,AACE,CAAA,MAAMP,cAAcU,SAAS,CAAC;wBAC5B,GAAGH,MAAM;wBACTI,WAAW,CAAC,0BAA0B,EAAEJ,OAAOI,SAAS,EAAE;oBAC5D,EAAC,EACDC,KAAK;gBACTC,YAAY,OAAON;oBACjB,MAAM,EAACO,QAAQ,EAAE,GAAGC,cAAa,GAAGR;oBACpC,MAAMP,cAAca,UAAU,CAAC;wBAC7B,GAAGE,YAAY;wBACfJ,WAAW,CAAC,0BAA0B,EAAEI,aAAaJ,SAAS,EAAE;wBAChE,GAAIG,aAAaE,YAAY,CAAC,IAAI;4BAACF;wBAAQ,CAAC;oBAC9C;gBACF;gBACAR,eAAe,OAAOC,SACpB,AACE,CAAA,MAAMP,cAAcM,aAAa,CAAC;wBAChC,GAAGC,MAAM;wBACTI,WAAW,CAAC,0BAA0B,EAAEJ,OAAOI,SAAS,EAAE;oBAC5D,EAAC,EACDH,OAAO;YACb;QACF;QACAW,YAAY;YAACC,WAAW5B;QAAe;QACvC6B,uBAAuBzC,QAAQyC,qBAAqB;IACtD;IACA,MAAMC,iBAAiB3D,qBAAqB;QAACwC,cAAcD;IAAkB;IAC7E,MAAMqB,oBAAoBnE,wBAAwB;QAChDoE,UAAU3B;QACV4B,OAAO9B;QACPQ,cAAcD;IAChB;IACA,MAAMwB,mBAAmB9C,QAAQ+C,SAAS,GAAG;QAACvB,YAAYH;IAAgB,MAAM,EAAE;IAElF,MAAM2B,UAAU;QACdrE;QACAP,iBAAiB;YAACoD,YAAYH;QAAgB;QAC9C7B;QACAL,oBAAoB8B;QACpB/C,kBAAkB;YAACuD,SAASL;QAAa;QACzCG,aAAajB,MAAM;QACnBoC;QACAC;QACArD,sBAAsB;YACpB2D,aAAa9B;YACb0B,OAAO9B;YACPmC,aAAahC;YACbiC,MAAMrC;YACN8B,UAAU3B;YACVmC,SAASpC;YACTS,SAASL;YACTG,cAAcD;QAChB;QACAtD;QACCgC,CAAAA,QAAQqD,aAAa,IAAIpE,mBAAkB,EAAG;YAACkE,MAAMrC;QAAU;QAChEhC,iBAAiB;YACf0D,WAAW5B;YACX0C,yBAAyB3D,kBAAkBrB,WAAWiF,+BAA+B;QACvF;QACAlE,qBAAqB;YAACmD,WAAW5B;QAAe;QAChDlC;WACGoE;KACJ;IACDjD,iCAAiC;QAAC2D,WAAWvD;QAAsB+C;IAAO;IAC1E/C,qBAAqBwD,IAAI;IACzB,OAAOT;AACT"}
1
+ {"version":3,"sources":["../src/modules.ts"],"sourcesContent":["import {annotationsModule} from '@shipfox/annotations';\nimport {annotationsInterModuleContract} from '@shipfox/annotations-dto/inter-module';\nimport {createAgentModule} from '@shipfox/api-agent';\nimport {agentInterModuleContract} from '@shipfox/api-agent-dto/inter-module';\nimport {createAuthModule} from '@shipfox/api-auth';\nimport {config as authConfig} from '@shipfox/api-auth/config';\nimport {\n type AuthInterModuleClient,\n authInterModuleContract,\n} from '@shipfox/api-auth-dto/inter-module';\nimport {createDefinitionsModule} from '@shipfox/api-definitions';\nimport {definitionsInterModuleContract} from '@shipfox/api-definitions-dto/inter-module';\nimport {dispatcherModule} from '@shipfox/api-dispatcher';\nimport {emailChallengesModule} from '@shipfox/api-email-challenges';\nimport {createIntegrationsContext, type WebhookDeliverySource} from '@shipfox/api-integration-core';\nimport {integrationsInterModuleContract} from '@shipfox/api-integration-core-dto/inter-module';\nimport {createLogsModule} from '@shipfox/api-logs';\nimport {createProjectsModule} from '@shipfox/api-projects';\nimport {projectsInterModuleContract} from '@shipfox/api-projects-dto/inter-module';\nimport {createRunnersModule} from '@shipfox/api-runners';\nimport {runnersInterModuleContract} from '@shipfox/api-runners-dto/inter-module';\nimport {createSecretsModule} from '@shipfox/api-secrets';\nimport {secretsInterModuleContract} from '@shipfox/api-secrets-dto/inter-module';\nimport {createTriggersModule} from '@shipfox/api-triggers';\nimport {createWorkflowsModule} from '@shipfox/api-workflows';\nimport {workflowsInterModuleContract} from '@shipfox/api-workflows-dto/inter-module';\nimport {workspacesModule} from '@shipfox/api-workspaces';\nimport {\n type WorkspacesInterModuleClient,\n workspacesInterModuleContract,\n} from '@shipfox/api-workspaces-dto/inter-module';\nimport {reportError} from '@shipfox/node-error-monitoring';\nimport {durationToSeconds} from '@shipfox/node-jwt';\nimport type {ShipfoxModule} from '@shipfox/node-module';\nimport {\n createInMemoryInterModuleTransport,\n registerInterModulePresentations,\n} from '@shipfox/node-module/inter-module';\nimport {logger} from '@shipfox/node-opentelemetry';\n\nexport interface DefaultModulesOptions {\n webhookDeliverySource?: WebhookDeliverySource | undefined;\n authModule?: DefaultAuthModuleFactory | undefined;\n runnersModule?: DefaultRunnersModuleFactory | undefined;\n extension?: DefaultModulesExtension | undefined;\n}\n\nexport type DefaultAuthModuleFactory = (options: {\n workspaces: WorkspacesInterModuleClient;\n}) => ShipfoxModule;\nexport type DefaultRunnersModuleFactory = (options: {auth: AuthInterModuleClient}) => ShipfoxModule;\nexport type DefaultModulesExtension = (options: {\n workspaces: WorkspacesInterModuleClient;\n}) => ShipfoxModule[];\n\nexport async function defaultModules(\n options: DefaultModulesOptions = {},\n): Promise<ShipfoxModule[]> {\n const interModuleTransport = createInMemoryInterModuleTransport({\n reportInternalError: (error, context) => {\n logger().error(\n {err: error, module: context.module, method: context.method, phase: context.phase},\n 'Inter-module call failed unexpectedly',\n );\n reportError(error, {\n boundary: 'inter-module',\n operation: `${context.module}.${context.method}`,\n tags: {module: context.module, method: context.method, phase: context.phase},\n });\n },\n });\n const workflowsClient = interModuleTransport.createClient(workflowsInterModuleContract);\n const authClient = interModuleTransport.createClient(authInterModuleContract);\n const agentClient = interModuleTransport.createClient(agentInterModuleContract);\n const runnersClient = interModuleTransport.createClient(runnersInterModuleContract);\n const projectsClient = interModuleTransport.createClient(projectsInterModuleContract);\n const definitionsClient = interModuleTransport.createClient(definitionsInterModuleContract);\n const annotationsClient = interModuleTransport.createClient(annotationsInterModuleContract);\n const secretsClient = interModuleTransport.createClient(secretsInterModuleContract);\n const workspacesClient = interModuleTransport.createClient(workspacesInterModuleContract);\n const integrationsClient = interModuleTransport.createClient(integrationsInterModuleContract);\n const integrations = await createIntegrationsContext({\n workspaces: workspacesClient,\n secrets: {\n deleteSecrets: async (params) => (await secretsClient.deleteSecrets(params)).deleted,\n linear: {\n getSecret: async (params) =>\n (\n await secretsClient.getSecret({\n ...params,\n namespace: `system/integrations/linear/${params.namespace}`,\n })\n ).value,\n setSecrets: async (params) => {\n const {editedBy, ...secretParams} = params;\n await secretsClient.setSecrets({\n ...secretParams,\n namespace: `system/integrations/linear/${secretParams.namespace}`,\n ...(editedBy === undefined ? {} : {editedBy}),\n });\n },\n deleteSecrets: async (params) =>\n (\n await secretsClient.deleteSecrets({\n ...params,\n namespace: `system/integrations/linear/${params.namespace}`,\n })\n ).deleted,\n },\n jira: {\n getSecret: async (params) =>\n (\n await secretsClient.getSecret({\n ...params,\n namespace: `system/integrations/jira/${params.namespace}`,\n })\n ).value,\n setSecrets: async (params) => {\n const {editedBy, ...secretParams} = params;\n await secretsClient.setSecrets({\n ...secretParams,\n namespace: `system/integrations/jira/${secretParams.namespace}`,\n ...(editedBy === undefined ? {} : {editedBy}),\n });\n },\n deleteSecrets: async (params) =>\n (\n await secretsClient.deleteSecrets({\n ...params,\n namespace: `system/integrations/jira/${params.namespace}`,\n })\n ).deleted,\n },\n slack: {\n getSecret: async (params) =>\n (\n await secretsClient.getSecret({\n ...params,\n namespace: `system/integrations/slack/${params.namespace}`,\n })\n ).value,\n setSecrets: async (params) => {\n const {editedBy, ...secretParams} = params;\n await secretsClient.setSecrets({\n ...secretParams,\n namespace: `system/integrations/slack/${secretParams.namespace}`,\n ...(editedBy === undefined ? {} : {editedBy}),\n });\n },\n deleteSecrets: async (params) =>\n (\n await secretsClient.deleteSecrets({\n ...params,\n namespace: `system/integrations/slack/${params.namespace}`,\n })\n ).deleted,\n },\n },\n agentTools: {workflows: workflowsClient},\n webhookDeliverySource: options.webhookDeliverySource,\n });\n const projectsModule = createProjectsModule({integrations: integrationsClient});\n const definitionsModule = createDefinitionsModule({\n projects: projectsClient,\n agent: agentClient,\n integrations: integrationsClient,\n });\n const extensionModules = options.extension?.({workspaces: workspacesClient}) ?? [];\n\n const modules = [\n emailChallengesModule,\n (options.authModule ?? createAuthModule)({workspaces: workspacesClient}),\n workspacesModule,\n createSecretsModule(projectsClient),\n createAgentModule({secrets: secretsClient}),\n integrations.module,\n projectsModule,\n definitionsModule,\n createWorkflowsModule({\n annotations: annotationsClient,\n agent: agentClient,\n definitions: definitionsClient,\n auth: authClient,\n projects: projectsClient,\n runners: runnersClient,\n secrets: secretsClient,\n workspaces: workspacesClient,\n integrations: integrationsClient,\n }),\n annotationsModule,\n (options.runnersModule ?? createRunnersModule)({auth: authClient}),\n createLogsModule({\n workflows: workflowsClient,\n jobLeaseTokenTtlSeconds: durationToSeconds(authConfig.AUTH_JOB_LEASE_TOKEN_EXPIRES_IN),\n }),\n createTriggersModule({workflows: workflowsClient}),\n dispatcherModule,\n ...extensionModules,\n ];\n registerInterModulePresentations({transport: interModuleTransport, modules});\n interModuleTransport.seal();\n return modules;\n}\n"],"names":["annotationsModule","annotationsInterModuleContract","createAgentModule","agentInterModuleContract","createAuthModule","config","authConfig","authInterModuleContract","createDefinitionsModule","definitionsInterModuleContract","dispatcherModule","emailChallengesModule","createIntegrationsContext","integrationsInterModuleContract","createLogsModule","createProjectsModule","projectsInterModuleContract","createRunnersModule","runnersInterModuleContract","createSecretsModule","secretsInterModuleContract","createTriggersModule","createWorkflowsModule","workflowsInterModuleContract","workspacesModule","workspacesInterModuleContract","reportError","durationToSeconds","createInMemoryInterModuleTransport","registerInterModulePresentations","logger","defaultModules","options","interModuleTransport","reportInternalError","error","context","err","module","method","phase","boundary","operation","tags","workflowsClient","createClient","authClient","agentClient","runnersClient","projectsClient","definitionsClient","annotationsClient","secretsClient","workspacesClient","integrationsClient","integrations","workspaces","secrets","deleteSecrets","params","deleted","linear","getSecret","namespace","value","setSecrets","editedBy","secretParams","undefined","jira","slack","agentTools","workflows","webhookDeliverySource","projectsModule","definitionsModule","projects","agent","extensionModules","extension","modules","authModule","annotations","definitions","auth","runners","runnersModule","jobLeaseTokenTtlSeconds","AUTH_JOB_LEASE_TOKEN_EXPIRES_IN","transport","seal"],"mappings":"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"}