@goliapkg/sentori-svelte 0.1.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/lib/index.d.ts +57 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +80 -0
- package/lib/index.js.map +1 -0
- package/package.json +60 -0
- package/src/__tests__/smoke.test.ts +34 -0
- package/src/index.ts +103 -0
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 45 sub-C — Svelte / SvelteKit adapter for Sentori.
|
|
3
|
+
*
|
|
4
|
+
* SvelteKit usage (preferred):
|
|
5
|
+
*
|
|
6
|
+
* // hooks.client.ts
|
|
7
|
+
* import { initSentori } from '@goliapkg/sentori-svelte'
|
|
8
|
+
* initSentori({ token: 'st_pk_...', release: 'myapp@1.0.0' })
|
|
9
|
+
*
|
|
10
|
+
* export const handleError = sentoriHandleError()
|
|
11
|
+
*
|
|
12
|
+
* What you get:
|
|
13
|
+
* - `initSentori(opts)` — thin wrapper over the JS SDK init
|
|
14
|
+
* - `sentoriHandleError()` — returns a SvelteKit `HandleClientError`
|
|
15
|
+
* hook that captures into Sentori then returns the original
|
|
16
|
+
* error metadata so SvelteKit's own error page still renders
|
|
17
|
+
* - `traceNavigation(navigating)` — feed `$navigating` from
|
|
18
|
+
* `$app/stores` and we open / finish `svelte.navigation` spans
|
|
19
|
+
* per route transition (one trace per screen, same shape as
|
|
20
|
+
* the Vue + RN adapters)
|
|
21
|
+
*
|
|
22
|
+
* Vanilla Svelte (no SvelteKit) — call `initSentori` from your app
|
|
23
|
+
* root + use the `<svelte:boundary>` element (Svelte 5+) or
|
|
24
|
+
* `onError` prop on your top-level component.
|
|
25
|
+
*/
|
|
26
|
+
import { type InitOptions } from '@goliapkg/sentori-javascript';
|
|
27
|
+
export type SentoriSvelteOptions = InitOptions;
|
|
28
|
+
export declare function initSentori(options: SentoriSvelteOptions): void;
|
|
29
|
+
/**
|
|
30
|
+
* SvelteKit `handleError` hook factory. Returns a function with the
|
|
31
|
+
* `HandleClientError` shape (parameters typed loosely so we don't
|
|
32
|
+
* need to import SvelteKit's `@sveltejs/kit` types and force a
|
|
33
|
+
* peer dep).
|
|
34
|
+
*/
|
|
35
|
+
export declare function sentoriHandleError(): (input: {
|
|
36
|
+
error: unknown;
|
|
37
|
+
event?: unknown;
|
|
38
|
+
status?: number;
|
|
39
|
+
message?: string;
|
|
40
|
+
}) => {
|
|
41
|
+
message: string;
|
|
42
|
+
};
|
|
43
|
+
type NavigatingLike = null | {
|
|
44
|
+
from?: {
|
|
45
|
+
url: {
|
|
46
|
+
pathname: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
to?: {
|
|
50
|
+
url: {
|
|
51
|
+
pathname: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
export declare function traceNavigation(navigating: NavigatingLike): void;
|
|
56
|
+
export { addBreadcrumb, captureException, captureException as captureError, captureStep, getUser, setUser, } from '@goliapkg/sentori-javascript';
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAA;AAGrC,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAE9C,wBAAgB,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,CAAC,KAAK,EAAE;IAC5C,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,KAAK;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAMxB;AAaD,KAAK,cAAc,GAAG,IAAI,GAAG;IAAE,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAAC,EAAE,CAAC,EAAE;QAAE,GAAG,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAA;AACzG,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAsBhE;AAED,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,IAAI,YAAY,EAChC,WAAW,EACX,OAAO,EACP,OAAO,GACR,MAAM,8BAA8B,CAAA"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 45 sub-C — Svelte / SvelteKit adapter for Sentori.
|
|
3
|
+
*
|
|
4
|
+
* SvelteKit usage (preferred):
|
|
5
|
+
*
|
|
6
|
+
* // hooks.client.ts
|
|
7
|
+
* import { initSentori } from '@goliapkg/sentori-svelte'
|
|
8
|
+
* initSentori({ token: 'st_pk_...', release: 'myapp@1.0.0' })
|
|
9
|
+
*
|
|
10
|
+
* export const handleError = sentoriHandleError()
|
|
11
|
+
*
|
|
12
|
+
* What you get:
|
|
13
|
+
* - `initSentori(opts)` — thin wrapper over the JS SDK init
|
|
14
|
+
* - `sentoriHandleError()` — returns a SvelteKit `HandleClientError`
|
|
15
|
+
* hook that captures into Sentori then returns the original
|
|
16
|
+
* error metadata so SvelteKit's own error page still renders
|
|
17
|
+
* - `traceNavigation(navigating)` — feed `$navigating` from
|
|
18
|
+
* `$app/stores` and we open / finish `svelte.navigation` spans
|
|
19
|
+
* per route transition (one trace per screen, same shape as
|
|
20
|
+
* the Vue + RN adapters)
|
|
21
|
+
*
|
|
22
|
+
* Vanilla Svelte (no SvelteKit) — call `initSentori` from your app
|
|
23
|
+
* root + use the `<svelte:boundary>` element (Svelte 5+) or
|
|
24
|
+
* `onError` prop on your top-level component.
|
|
25
|
+
*/
|
|
26
|
+
import { captureException as captureExceptionJs, captureStep, initSentori as initSentoriJs, } from '@goliapkg/sentori-javascript';
|
|
27
|
+
import { setActiveSpan, startSpan } from '@goliapkg/sentori-core';
|
|
28
|
+
export function initSentori(options) {
|
|
29
|
+
initSentoriJs(options);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* SvelteKit `handleError` hook factory. Returns a function with the
|
|
33
|
+
* `HandleClientError` shape (parameters typed loosely so we don't
|
|
34
|
+
* need to import SvelteKit's `@sveltejs/kit` types and force a
|
|
35
|
+
* peer dep).
|
|
36
|
+
*/
|
|
37
|
+
export function sentoriHandleError() {
|
|
38
|
+
return ({ error, message }) => {
|
|
39
|
+
const e = error instanceof Error ? error : new Error(String(error));
|
|
40
|
+
captureExceptionJs(e);
|
|
41
|
+
return { message: message ?? e.message };
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Trace page navigation. Pass SvelteKit's `$navigating` store value
|
|
46
|
+
* — when it transitions from null → some route, we open a span;
|
|
47
|
+
* when it transitions back to null, we finish it.
|
|
48
|
+
*
|
|
49
|
+
* // +layout.svelte
|
|
50
|
+
* import { traceNavigation } from '@goliapkg/sentori-svelte'
|
|
51
|
+
* import { navigating } from '$app/stores'
|
|
52
|
+
* $: traceNavigation($navigating)
|
|
53
|
+
*/
|
|
54
|
+
let _active = null;
|
|
55
|
+
export function traceNavigation(navigating) {
|
|
56
|
+
if (navigating) {
|
|
57
|
+
if (_active) {
|
|
58
|
+
_active.finish({ status: 'ok' });
|
|
59
|
+
_active = null;
|
|
60
|
+
}
|
|
61
|
+
const from = navigating.from?.url.pathname ?? '/';
|
|
62
|
+
const to = navigating.to?.url.pathname ?? '/';
|
|
63
|
+
const span = startSpan('svelte.navigation', {
|
|
64
|
+
name: `${from} → ${to}`,
|
|
65
|
+
parent: null,
|
|
66
|
+
tags: { 'nav.from': from, 'nav.to': to },
|
|
67
|
+
});
|
|
68
|
+
_active = span;
|
|
69
|
+
setActiveSpan(span);
|
|
70
|
+
captureStep(`route:${to}`, {
|
|
71
|
+
breadcrumb: { type: 'navigation', message: `${from} → ${to}` },
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if (_active) {
|
|
75
|
+
_active.finish({ status: 'ok' });
|
|
76
|
+
_active = null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export { addBreadcrumb, captureException, captureException as captureError, captureStep, getUser, setUser, } from '@goliapkg/sentori-javascript';
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EACL,gBAAgB,IAAI,kBAAkB,EACtC,WAAW,EACX,WAAW,IAAI,aAAa,GAE7B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAmB,MAAM,wBAAwB,CAAA;AAIlF,MAAM,UAAU,WAAW,CAAC,OAA6B;IACvD,aAAa,CAAC,OAAO,CAAC,CAAA;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB;IAMhC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACnE,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACrB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IAC1C,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,IAAI,OAAO,GAAsB,IAAI,CAAA;AAErC,MAAM,UAAU,eAAe,CAAC,UAA0B;IACxD,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAChC,OAAO,GAAG,IAAI,CAAA;QAChB,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAA;QACjD,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAA;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,mBAAmB,EAAE;YAC1C,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,EAAE;YACvB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;QACF,OAAO,GAAG,IAAI,CAAA;QACd,aAAa,CAAC,IAAI,CAAC,CAAA;QACnB,WAAW,CAAC,SAAS,EAAE,EAAE,EAAE;YACzB,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,EAAE,EAAE;SAC/D,CAAC,CAAA;IACJ,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QAChC,OAAO,GAAG,IAAI,CAAA;IAChB,CAAC;AACH,CAAC;AAED,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,IAAI,YAAY,EAChC,WAAW,EACX,OAAO,EACP,OAAO,GACR,MAAM,8BAA8B,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@goliapkg/sentori-svelte",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Svelte / SvelteKit adapter for Sentori — hooks.client + hooks.server init helpers, page navigation tracing.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://sentori.golia.jp",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/goliajp/sentori.git",
|
|
10
|
+
"directory": "sdk/svelte"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/goliajp/sentori/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"sentori",
|
|
17
|
+
"svelte",
|
|
18
|
+
"sveltekit",
|
|
19
|
+
"error-tracking"
|
|
20
|
+
],
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "./lib/index.js",
|
|
23
|
+
"types": "./lib/index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./lib/index.d.ts",
|
|
27
|
+
"default": "./lib/index.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"lib/",
|
|
32
|
+
"src/",
|
|
33
|
+
"README.md"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -p tsconfig.json",
|
|
37
|
+
"typecheck": "tsc --noEmit",
|
|
38
|
+
"test": "bun test",
|
|
39
|
+
"prepack": "bun run build"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"svelte": ">=4"
|
|
43
|
+
},
|
|
44
|
+
"peerDependenciesMeta": {
|
|
45
|
+
"svelte": {
|
|
46
|
+
"optional": true
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@goliapkg/sentori-core": "0.6.0",
|
|
51
|
+
"@goliapkg/sentori-javascript": "0.4.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/bun": "latest",
|
|
55
|
+
"typescript": "^5"
|
|
56
|
+
},
|
|
57
|
+
"publishConfig": {
|
|
58
|
+
"access": "public"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
addBreadcrumb,
|
|
5
|
+
captureException,
|
|
6
|
+
initSentori,
|
|
7
|
+
sentoriHandleError,
|
|
8
|
+
traceNavigation,
|
|
9
|
+
} from '../index.js'
|
|
10
|
+
|
|
11
|
+
describe('@goliapkg/sentori-svelte exports', () => {
|
|
12
|
+
test('exports the SDK init + capture surface', () => {
|
|
13
|
+
expect(typeof initSentori).toBe('function')
|
|
14
|
+
expect(typeof captureException).toBe('function')
|
|
15
|
+
expect(typeof addBreadcrumb).toBe('function')
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('sentoriHandleError returns a SvelteKit-shaped handler', () => {
|
|
19
|
+
const handler = sentoriHandleError()
|
|
20
|
+
const result = handler({ error: new Error('boom'), message: 'custom' })
|
|
21
|
+
expect(result).toEqual({ message: 'custom' })
|
|
22
|
+
|
|
23
|
+
const result2 = handler({ error: 'string-thrown' })
|
|
24
|
+
expect(result2.message).toBe('string-thrown')
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
test('traceNavigation accepts null + nav-object shape without throwing', () => {
|
|
28
|
+
expect(() => {
|
|
29
|
+
traceNavigation(null)
|
|
30
|
+
traceNavigation({ from: { url: { pathname: '/a' } }, to: { url: { pathname: '/b' } } })
|
|
31
|
+
traceNavigation(null)
|
|
32
|
+
}).not.toThrow()
|
|
33
|
+
})
|
|
34
|
+
})
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 45 sub-C — Svelte / SvelteKit adapter for Sentori.
|
|
3
|
+
*
|
|
4
|
+
* SvelteKit usage (preferred):
|
|
5
|
+
*
|
|
6
|
+
* // hooks.client.ts
|
|
7
|
+
* import { initSentori } from '@goliapkg/sentori-svelte'
|
|
8
|
+
* initSentori({ token: 'st_pk_...', release: 'myapp@1.0.0' })
|
|
9
|
+
*
|
|
10
|
+
* export const handleError = sentoriHandleError()
|
|
11
|
+
*
|
|
12
|
+
* What you get:
|
|
13
|
+
* - `initSentori(opts)` — thin wrapper over the JS SDK init
|
|
14
|
+
* - `sentoriHandleError()` — returns a SvelteKit `HandleClientError`
|
|
15
|
+
* hook that captures into Sentori then returns the original
|
|
16
|
+
* error metadata so SvelteKit's own error page still renders
|
|
17
|
+
* - `traceNavigation(navigating)` — feed `$navigating` from
|
|
18
|
+
* `$app/stores` and we open / finish `svelte.navigation` spans
|
|
19
|
+
* per route transition (one trace per screen, same shape as
|
|
20
|
+
* the Vue + RN adapters)
|
|
21
|
+
*
|
|
22
|
+
* Vanilla Svelte (no SvelteKit) — call `initSentori` from your app
|
|
23
|
+
* root + use the `<svelte:boundary>` element (Svelte 5+) or
|
|
24
|
+
* `onError` prop on your top-level component.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import {
|
|
28
|
+
captureException as captureExceptionJs,
|
|
29
|
+
captureStep,
|
|
30
|
+
initSentori as initSentoriJs,
|
|
31
|
+
type InitOptions,
|
|
32
|
+
} from '@goliapkg/sentori-javascript'
|
|
33
|
+
import { setActiveSpan, startSpan, type SpanHandle } from '@goliapkg/sentori-core'
|
|
34
|
+
|
|
35
|
+
export type SentoriSvelteOptions = InitOptions
|
|
36
|
+
|
|
37
|
+
export function initSentori(options: SentoriSvelteOptions): void {
|
|
38
|
+
initSentoriJs(options)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* SvelteKit `handleError` hook factory. Returns a function with the
|
|
43
|
+
* `HandleClientError` shape (parameters typed loosely so we don't
|
|
44
|
+
* need to import SvelteKit's `@sveltejs/kit` types and force a
|
|
45
|
+
* peer dep).
|
|
46
|
+
*/
|
|
47
|
+
export function sentoriHandleError(): (input: {
|
|
48
|
+
error: unknown
|
|
49
|
+
event?: unknown
|
|
50
|
+
status?: number
|
|
51
|
+
message?: string
|
|
52
|
+
}) => { message: string } {
|
|
53
|
+
return ({ error, message }) => {
|
|
54
|
+
const e = error instanceof Error ? error : new Error(String(error))
|
|
55
|
+
captureExceptionJs(e)
|
|
56
|
+
return { message: message ?? e.message }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Trace page navigation. Pass SvelteKit's `$navigating` store value
|
|
62
|
+
* — when it transitions from null → some route, we open a span;
|
|
63
|
+
* when it transitions back to null, we finish it.
|
|
64
|
+
*
|
|
65
|
+
* // +layout.svelte
|
|
66
|
+
* import { traceNavigation } from '@goliapkg/sentori-svelte'
|
|
67
|
+
* import { navigating } from '$app/stores'
|
|
68
|
+
* $: traceNavigation($navigating)
|
|
69
|
+
*/
|
|
70
|
+
let _active: SpanHandle | null = null
|
|
71
|
+
type NavigatingLike = null | { from?: { url: { pathname: string } }; to?: { url: { pathname: string } } }
|
|
72
|
+
export function traceNavigation(navigating: NavigatingLike): void {
|
|
73
|
+
if (navigating) {
|
|
74
|
+
if (_active) {
|
|
75
|
+
_active.finish({ status: 'ok' })
|
|
76
|
+
_active = null
|
|
77
|
+
}
|
|
78
|
+
const from = navigating.from?.url.pathname ?? '/'
|
|
79
|
+
const to = navigating.to?.url.pathname ?? '/'
|
|
80
|
+
const span = startSpan('svelte.navigation', {
|
|
81
|
+
name: `${from} → ${to}`,
|
|
82
|
+
parent: null,
|
|
83
|
+
tags: { 'nav.from': from, 'nav.to': to },
|
|
84
|
+
})
|
|
85
|
+
_active = span
|
|
86
|
+
setActiveSpan(span)
|
|
87
|
+
captureStep(`route:${to}`, {
|
|
88
|
+
breadcrumb: { type: 'navigation', message: `${from} → ${to}` },
|
|
89
|
+
})
|
|
90
|
+
} else if (_active) {
|
|
91
|
+
_active.finish({ status: 'ok' })
|
|
92
|
+
_active = null
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export {
|
|
97
|
+
addBreadcrumb,
|
|
98
|
+
captureException,
|
|
99
|
+
captureException as captureError,
|
|
100
|
+
captureStep,
|
|
101
|
+
getUser,
|
|
102
|
+
setUser,
|
|
103
|
+
} from '@goliapkg/sentori-javascript'
|