@faststore/api 4.5.1 → 4.6.0-dev.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/cjs/index.js +45 -43
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/index.mjs +885 -883
- package/dist/es/index.mjs.map +1 -1
- package/dist/src/observability/telemetry.d.ts +1 -1
- package/dist/src/observability/telemetry.d.ts.map +1 -1
- package/dist/src/platforms/vtex/index.d.ts +1 -1
- package/dist/src/platforms/vtex/index.d.ts.map +1 -1
- package/dist/src/typings/globals.d.ts +2 -5
- package/dist/src/typings/globals.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/observability/telemetry.ts +54 -37
- package/src/platforms/vtex/index.ts +18 -23
- package/src/typings/globals.ts +2 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const ResolverTrace: <TContext extends {
|
|
2
|
-
|
|
2
|
+
OTEL_ENABLED: boolean;
|
|
3
3
|
account: string;
|
|
4
4
|
discoveryConfig: Record<string, any>;
|
|
5
5
|
}, TSource = any, TVars = any, TReturn = any>(fn: (source: TSource, vars: TVars, context: TContext, info: any) => TReturn, resolverName?: string) => (source: TSource, vars: TVars, graphqlContext: TContext, info: any) => TReturn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/observability/telemetry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/observability/telemetry.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,GACxB,QAAQ,SAAS;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACrC,EACD,OAAO,GAAG,GAAG,EACb,KAAK,GAAG,GAAG,EACX,OAAO,GAAG,GAAG,EAEb,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,EAC3E,qBAAyC,MAGvC,QAAQ,OAAO,EACf,MAAM,KAAK,EACX,gBAAgB,QAAQ,EACxB,MAAM,GAAG,KACR,OA2CJ,CAAA"}
|
|
@@ -30,7 +30,7 @@ export interface GraphqlContext {
|
|
|
30
30
|
};
|
|
31
31
|
headers: Record<string, string>;
|
|
32
32
|
account: string;
|
|
33
|
-
|
|
33
|
+
OTEL_ENABLED: boolean;
|
|
34
34
|
/** Discovery config passed from @faststore/core, including localization settings. */
|
|
35
35
|
discoveryConfig?: Record<string, unknown>;
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/platforms/vtex/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/platforms/vtex/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,SAAS,CAAA;AAKtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAG9C,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;SAKK;IACL,OAAO,EAAE;QACP,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC1B,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,YAAY,CAAA;QACnB,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC5C;;;;;WAKG;QACH,wBAAwB,CAAC,EAAE,GAAG,CAC5B,MAAM,EACN,OAAO,CAAC,OAAO,mBAAmB,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAClE,CAAA;KACF,CAAA;IACD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,qFAAqF;IACrF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC1C;AAED,eAAO,MAAM,yBAAyB,GAAU,SAAS,OAAO,mBACjD,GAAG,KAAG,cAAc,CAkBlC,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,QAAQ,CAC/D,cAAc,EACd,CAAC,EACD,CAAC,EACD,CAAC,CACF,CAAA;AAED,wBAAgB,YAAY;;;;;;gJAkCuV,6CAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAA+if,CAAC;mBAAsB,CAAC;kBAAqB,CAAC;yBAA8B,CAAC;uBAA0B,CAAC;yBAA4B,CAAC;uBAA0B,CAAC;iBAAoB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAAwzZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAlB955B;AAED,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,aAAa,iBAe5D"}
|
|
@@ -14,12 +14,9 @@ interface Options {
|
|
|
14
14
|
incrementAddress: boolean;
|
|
15
15
|
flags?: FeatureFlags;
|
|
16
16
|
version?: string;
|
|
17
|
-
OTEL?: {
|
|
18
|
-
enabled: boolean;
|
|
19
|
-
traceparent?: string;
|
|
20
|
-
tracestate?: string;
|
|
21
|
-
};
|
|
22
17
|
discoveryConfig?: Record<string, unknown>;
|
|
18
|
+
/** Emit OpenTelemetry spans from resolvers. Defaults to disabled. */
|
|
19
|
+
OTEL_ENABLED?: boolean;
|
|
23
20
|
}
|
|
24
21
|
interface FeatureFlags {
|
|
25
22
|
enableOrderFormSync?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../../../src/typings/globals.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG,MAAM,CAAA;AAEtB,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAExD,KAAK,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAE3D,UAAU,OAAO;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,oBAAoB,GAAG,kBAAkB,CAAA;IAEtD,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB,EAAE,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;IAClD,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;IACzB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,
|
|
1
|
+
{"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../../../src/typings/globals.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG,MAAM,CAAA;AAEtB,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAExD,KAAK,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAE3D,UAAU,OAAO;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,oBAAoB,GAAG,kBAAkB,CAAA;IAEtD,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB,EAAE,OAAO,CAAA;IAC7B,kBAAkB,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;IAClD,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;IACzB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,UAAU,YAAY;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,4BAA4B,CAAC,EAAE,OAAO,CAAA;CACvC;AAED,KAAK,QAAQ,CACX,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpC,OAAO,GAAG,GAAG,EACb,KAAK,GAAG,GAAG,EACX,OAAO,GAAG,GAAG,IACX,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faststore/api",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.0-dev.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"typings": "dist/src/index.d.ts",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@types/cookie": "^0.6.0",
|
|
50
50
|
"@types/express": "^4.17.16",
|
|
51
51
|
"@types/sanitize-html": "^2.9.1",
|
|
52
|
-
"@vitest/coverage-v8": "4.0.
|
|
52
|
+
"@vitest/coverage-v8": "4.0.18",
|
|
53
53
|
"concurrently": "^6.2.1",
|
|
54
54
|
"copyfiles": "^2.4.1",
|
|
55
55
|
"graphql": "16.11.0",
|
|
@@ -57,12 +57,12 @@
|
|
|
57
57
|
"tslib": "2.8.1",
|
|
58
58
|
"vite": "7.1.5",
|
|
59
59
|
"vite-plugin-dts": "4.5.4",
|
|
60
|
-
"vitest": "
|
|
61
|
-
"@faststore/diagnostics": "^4.
|
|
60
|
+
"vitest": "4.0.18",
|
|
61
|
+
"@faststore/diagnostics": "^4.6.0-dev.0"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
64
|
"graphql": "16.11.0",
|
|
65
|
-
"@faststore/diagnostics": "4.
|
|
65
|
+
"@faststore/diagnostics": "4.6.0-dev.0"
|
|
66
66
|
},
|
|
67
67
|
"publishConfig": {
|
|
68
68
|
"access": "public"
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { OTELAPI } from '@faststore/diagnostics'
|
|
1
|
+
import { logger, OTELAPI } from '@faststore/diagnostics'
|
|
2
2
|
import { name, version } from '../../package.json' with { type: 'json' }
|
|
3
3
|
|
|
4
|
+
const OTELLogger = logger('@faststore/api')
|
|
5
|
+
|
|
4
6
|
export const ResolverTrace = <
|
|
5
7
|
TContext extends {
|
|
6
|
-
|
|
8
|
+
OTEL_ENABLED: boolean
|
|
7
9
|
account: string
|
|
8
10
|
discoveryConfig: Record<string, any>
|
|
9
11
|
},
|
|
@@ -12,7 +14,7 @@ export const ResolverTrace = <
|
|
|
12
14
|
TReturn = any,
|
|
13
15
|
>(
|
|
14
16
|
fn: (source: TSource, vars: TVars, context: TContext, info: any) => TReturn,
|
|
15
|
-
resolverName
|
|
17
|
+
resolverName = 'Unknown Graphql Resolver'
|
|
16
18
|
) => {
|
|
17
19
|
return (
|
|
18
20
|
source: TSource,
|
|
@@ -20,47 +22,62 @@ export const ResolverTrace = <
|
|
|
20
22
|
graphqlContext: TContext,
|
|
21
23
|
info: any
|
|
22
24
|
): TReturn => {
|
|
23
|
-
if (
|
|
25
|
+
if (!graphqlContext?.OTEL_ENABLED) {
|
|
24
26
|
return fn(source, vars, graphqlContext, info)
|
|
25
27
|
}
|
|
26
28
|
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
const span = OTELAPI.trace.getTracer('Graphql').startSpan(resolverName, {
|
|
30
|
+
kind: OTELAPI.SpanKind.INTERNAL,
|
|
31
|
+
attributes: {
|
|
32
|
+
timestamp: Date.now(),
|
|
33
|
+
'@faststore_version': version,
|
|
34
|
+
'@faststore_package_name': name,
|
|
35
|
+
'@faststore_account_name': graphqlContext.account,
|
|
36
|
+
'@faststore_environment': process.env.NODE_ENV,
|
|
37
|
+
'@faststore_resolver_parent_type': info?.parentType?.name,
|
|
38
|
+
'@faststore_resolver_field_name': info?.fieldName,
|
|
39
|
+
},
|
|
40
|
+
})
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
const span = trace.startSpan(resolverName ?? 'Unknown Graphql Resolver', {
|
|
35
|
-
startTime: Date.now(),
|
|
36
|
-
kind: OTELAPI.SpanKind.INTERNAL,
|
|
37
|
-
attributes: {
|
|
38
|
-
timestamp: Date.now(),
|
|
39
|
-
'@faststore_version': version,
|
|
40
|
-
'@faststore_package_name': name,
|
|
41
|
-
'@faststore_account_name': graphqlContext.account,
|
|
42
|
-
'@faststore_environment': process.env.NODE_ENV,
|
|
43
|
-
},
|
|
44
|
-
})
|
|
42
|
+
const otelContext = OTELAPI.trace.setSpan(OTELAPI.context.active(), span)
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
try {
|
|
45
|
+
const result = OTELAPI.context.with(otelContext, () =>
|
|
46
|
+
fn(source, vars, graphqlContext, info)
|
|
47
|
+
)
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
if (result instanceof Promise) {
|
|
50
|
+
return result.then(
|
|
51
|
+
(value) => {
|
|
52
|
+
span.end()
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
} catch (error) {
|
|
60
|
-
span.end()
|
|
61
|
-
console.error(`Error when executing resolver: ${resolverName}`, error)
|
|
62
|
-
throw error
|
|
54
|
+
return value
|
|
55
|
+
},
|
|
56
|
+
(error) => recordResolverError(error, span, resolverName)
|
|
57
|
+
) as TReturn
|
|
63
58
|
}
|
|
64
|
-
|
|
59
|
+
|
|
60
|
+
span.end()
|
|
61
|
+
|
|
62
|
+
return result
|
|
63
|
+
} catch (error) {
|
|
64
|
+
return recordResolverError(error, span, resolverName)
|
|
65
|
+
}
|
|
65
66
|
}
|
|
66
67
|
}
|
|
68
|
+
|
|
69
|
+
/** Marks the span as failed and rethrows, keeping call sites linear. */
|
|
70
|
+
function recordResolverError(
|
|
71
|
+
error: unknown,
|
|
72
|
+
span: OTELAPI.Span,
|
|
73
|
+
resolverName: string
|
|
74
|
+
): never {
|
|
75
|
+
span.setStatus({ code: OTELAPI.SpanStatusCode.ERROR })
|
|
76
|
+
span.recordException(error as Error)
|
|
77
|
+
span.end()
|
|
78
|
+
|
|
79
|
+
console.error(`Error at resolver: ${resolverName}: \n %o`, error)
|
|
80
|
+
OTELLogger('error', 'Error at resolver: %s\n%o', resolverName, error)
|
|
81
|
+
|
|
82
|
+
throw error
|
|
83
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { OTELAPI } from '@faststore/diagnostics'
|
|
2
1
|
import { mergeSchemas } from '@graphql-tools/schema'
|
|
3
2
|
import { type GraphQLSchema, isSchema } from 'graphql'
|
|
4
3
|
import { withDirectives } from '../../directives'
|
|
@@ -45,34 +44,30 @@ export interface GraphqlContext {
|
|
|
45
44
|
}
|
|
46
45
|
headers: Record<string, string>
|
|
47
46
|
account: string
|
|
48
|
-
|
|
47
|
+
OTEL_ENABLED: boolean
|
|
49
48
|
/** Discovery config passed from @faststore/core, including localization settings. */
|
|
50
49
|
discoveryConfig?: Record<string, unknown>
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
export const GraphqlVtexContextFactory = async (options: Options) => {
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// must already be assigned.
|
|
70
|
-
ctx.clients = getClients(options, ctx)
|
|
71
|
-
ctx.loaders = getLoaders(options, ctx)
|
|
53
|
+
return (ctx: any): GraphqlContext => {
|
|
54
|
+
ctx.storage = {
|
|
55
|
+
channel: ChannelMarshal.parse(options.channel),
|
|
56
|
+
flags: options.flags ?? {},
|
|
57
|
+
locale: options.locale,
|
|
58
|
+
cookies: new Map<string, Record<string, string>>(),
|
|
59
|
+
}
|
|
60
|
+
ctx.account = options.account
|
|
61
|
+
ctx.OTEL_ENABLED = options.OTEL_ENABLED
|
|
62
|
+
ctx.discoveryConfig = options.discoveryConfig
|
|
63
|
+
// Build clients/loaders last: they capture `ctx` and read storage,
|
|
64
|
+
// discoveryConfig, etc. at request time, so everything they may depend on
|
|
65
|
+
// must already be assigned.
|
|
66
|
+
ctx.clients = getClients(options, ctx)
|
|
67
|
+
ctx.loaders = getLoaders(options, ctx)
|
|
72
68
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
)
|
|
69
|
+
return ctx
|
|
70
|
+
}
|
|
76
71
|
}
|
|
77
72
|
|
|
78
73
|
export type GraphqlResolver<S = any, V = any, R = any> = Resolver<
|
package/src/typings/globals.ts
CHANGED
|
@@ -18,12 +18,9 @@ interface Options {
|
|
|
18
18
|
incrementAddress: boolean
|
|
19
19
|
flags?: FeatureFlags
|
|
20
20
|
version?: string
|
|
21
|
-
OTEL?: {
|
|
22
|
-
enabled: boolean
|
|
23
|
-
traceparent?: string
|
|
24
|
-
tracestate?: string
|
|
25
|
-
}
|
|
26
21
|
discoveryConfig?: Record<string, unknown>
|
|
22
|
+
/** Emit OpenTelemetry spans from resolvers. Defaults to disabled. */
|
|
23
|
+
OTEL_ENABLED?: boolean
|
|
27
24
|
}
|
|
28
25
|
|
|
29
26
|
interface FeatureFlags {
|