@contentful/experiences-client 0.5.2 → 0.7.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/CHANGELOG.md +24 -0
- package/README.md +70 -22
- package/dist/contentful-experiences.d.ts +17 -10
- package/dist/contentful-experiences.js +25 -12
- package/dist/contentful-experiences.js.map +1 -1
- package/dist/create-delivery-client.d.ts +29 -0
- package/dist/create-delivery-client.js +27 -0
- package/dist/create-delivery-client.js.map +1 -0
- package/dist/create-optimization-client.d.ts +20 -0
- package/dist/create-optimization-client.js +30 -0
- package/dist/create-optimization-client.js.map +1 -0
- package/dist/event-builder.js +35 -27
- package/dist/event-builder.js.map +1 -1
- package/dist/fetch-experience.d.ts +12 -9
- package/dist/fetch-experience.js +32 -18
- package/dist/fetch-experience.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime-event-handoff.d.ts +33 -0
- package/dist/runtime-event-handoff.js +68 -0
- package/dist/runtime-event-handoff.js.map +1 -0
- package/dist/runtime-event-methods.d.ts +52 -0
- package/dist/runtime-event-methods.js +105 -0
- package/dist/runtime-event-methods.js.map +1 -0
- package/dist/sdk-info.js +1 -1
- package/package.json +2 -2
- package/dist/create-client.d.ts +0 -14
- package/dist/create-client.js +0 -13
- package/dist/create-client.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime-event-methods.ts"],"sourcesContent":["import type {\n ExperienceApiClient as PersonalizationApiClient,\n InsightsApiClient as AnalyticsApiClient,\n} from '@contentful/optimization-api-client';\nimport type {\n ExperienceEvent as PersonalizationEvent,\n InsightsEvent as AnalyticsEvent,\n OptimizationData as EventOptimizationData,\n PartialProfile as EventProfile,\n} from '@contentful/optimization-api-client/api-schemas';\n\nimport type EventBuilder from './event-builder.js';\nimport type {\n ClickBuilderArgs,\n FlagViewBuilderArgs,\n HoverBuilderArgs,\n IdentifyBuilderArgs,\n PageViewBuilderArgs,\n TrackBuilderArgs,\n UniversalEventBuilderArgs,\n ViewBuilderArgs,\n} from './event-builder.js';\nexport type { EventOptimizationData, EventProfile };\n\nexport type PersonalizationEventMethod = 'identify' | 'page' | 'track';\nexport type AnalyticsEventMethod = 'trackView' | 'trackClick' | 'trackHover' | 'trackFlagView';\n\n/** The Optimization API surface used by the shared runtime. */\nexport interface RuntimeOptimizationApiClient {\n readonly personalization: Pick<PersonalizationApiClient, 'upsertProfile'>;\n readonly analytics: Pick<AnalyticsApiClient, 'sendBatchEvents'>;\n}\n\n/** Internal strategy used by a runtime to commit or stage built events. */\nexport interface RuntimeEventDispatch {\n personalization(\n event: PersonalizationEvent,\n profile: EventProfile | undefined\n ): Promise<EventOptimizationData>;\n analytics(event: AnalyticsEvent, profile: EventProfile): Promise<boolean>;\n}\n\n/** Runtime-owned state and context used to bind otherwise stateless event methods. */\nexport interface RuntimeEventBindings {\n getProfile: () => EventProfile | undefined;\n setProfile: (profile: EventProfile) => void;\n /** Changes when an external session boundary must invalidate an in-flight profile response. */\n getProfileRevision?: () => number;\n getEventContext?: () => UniversalEventBuilderArgs;\n getConsent?: () => boolean | undefined;\n}\n\n/**\n * Event-triggering surface shared by the public Node and Web runtimes.\n * Profile-producing calls are not serialized; await them before another\n * profile-producing or Analytics call on the same bound runtime. In Node\n * handoff mode an Analytics `true` means accepted into the handoff journal,\n * not delivered to the Analytics transport.\n */\nexport interface RuntimeEventMethods {\n readonly profile: EventProfile | undefined;\n identify(args: IdentifyBuilderArgs): Promise<EventOptimizationData>;\n page(args?: PageViewBuilderArgs): Promise<EventOptimizationData>;\n track(args: TrackBuilderArgs): Promise<EventOptimizationData>;\n trackView(args: ViewBuilderArgs): Promise<boolean>;\n trackClick(args: ClickBuilderArgs): Promise<boolean>;\n trackHover(args: HoverBuilderArgs): Promise<boolean>;\n trackFlagView(args: FlagViewBuilderArgs): Promise<boolean>;\n}\n\n/** Thrown when an Analytics event is triggered before a profile is available. */\nexport class EventProfileRequiredError extends Error {\n readonly method: AnalyticsEventMethod;\n\n constructor(method: AnalyticsEventMethod) {\n super(\n `${method}() requires a current event profile. Supply an initial profile or await identify(), page(), or track() first.`\n );\n this.name = 'EventProfileRequiredError';\n this.method = method;\n }\n}\n\nclass BoundRuntimeEventMethods implements RuntimeEventMethods {\n constructor(\n private readonly eventBuilder: EventBuilder,\n private readonly bindings: RuntimeEventBindings,\n private readonly dispatch: RuntimeEventDispatch\n ) {}\n\n get profile(): EventProfile | undefined {\n return this.bindings.getProfile();\n }\n\n async identify(args: IdentifyBuilderArgs): Promise<EventOptimizationData> {\n return this.sendPersonalizationEvent(\n this.eventBuilder.buildIdentify(this.withEventContext(args))\n );\n }\n\n async page(args: PageViewBuilderArgs = {}): Promise<EventOptimizationData> {\n return this.sendPersonalizationEvent(\n this.eventBuilder.buildPageView(this.withEventContext(args))\n );\n }\n\n async track(args: TrackBuilderArgs): Promise<EventOptimizationData> {\n return this.sendPersonalizationEvent(this.eventBuilder.buildTrack(this.withEventContext(args)));\n }\n\n async trackView(args: ViewBuilderArgs): Promise<boolean> {\n return this.sendAnalyticsEvent(\n 'trackView',\n this.eventBuilder.buildView(this.withEventContext(args))\n );\n }\n\n async trackClick(args: ClickBuilderArgs): Promise<boolean> {\n return this.sendAnalyticsEvent(\n 'trackClick',\n this.eventBuilder.buildClick(this.withEventContext(args))\n );\n }\n\n async trackHover(args: HoverBuilderArgs): Promise<boolean> {\n return this.sendAnalyticsEvent(\n 'trackHover',\n this.eventBuilder.buildHover(this.withEventContext(args))\n );\n }\n\n async trackFlagView(args: FlagViewBuilderArgs): Promise<boolean> {\n return this.sendAnalyticsEvent(\n 'trackFlagView',\n this.eventBuilder.buildFlagView(this.withEventContext(args))\n );\n }\n\n private withEventContext<TArgs extends UniversalEventBuilderArgs>(args: TArgs): TArgs {\n return { ...this.bindings.getEventContext?.(), ...args } as TArgs;\n }\n\n private withConsent<TEvent extends PersonalizationEvent | AnalyticsEvent>(event: TEvent): TEvent {\n const consent = this.bindings.getConsent?.();\n if (consent === undefined) return event;\n\n return {\n ...event,\n context: {\n ...event.context,\n gdpr: { ...event.context.gdpr, isConsentGiven: consent },\n },\n } as TEvent;\n }\n\n private async sendPersonalizationEvent(\n event: PersonalizationEvent\n ): Promise<EventOptimizationData> {\n const eventWithConsent = this.withConsent(event);\n const profileRevision = this.bindings.getProfileRevision?.();\n const data = await this.dispatch.personalization(eventWithConsent, this.profile);\n if (profileRevision === undefined || this.bindings.getProfileRevision?.() === profileRevision) {\n this.bindings.setProfile(data.profile);\n }\n return data;\n }\n\n private async sendAnalyticsEvent(\n method: AnalyticsEventMethod,\n event: AnalyticsEvent\n ): Promise<boolean> {\n const profile = this.profile;\n if (profile === undefined) throw new EventProfileRequiredError(method);\n return this.dispatch.analytics(this.withConsent(event), profile);\n }\n}\n\nfunction createDirectEventDispatch(api: RuntimeOptimizationApiClient): RuntimeEventDispatch {\n return {\n personalization: (event, profile) =>\n api.personalization.upsertProfile(\n { profileId: profile?.id, events: [event] },\n { locale: event.context.locale }\n ),\n analytics: (event, profile) => api.analytics.sendBatchEvents([{ profile, events: [event] }]),\n };\n}\n\nexport function createRuntimeEventMethods(\n api: RuntimeOptimizationApiClient,\n eventBuilder: EventBuilder,\n bindings: RuntimeEventBindings,\n dispatch: RuntimeEventDispatch = createDirectEventDispatch(api)\n): RuntimeEventMethods {\n return new BoundRuntimeEventMethods(eventBuilder, bindings, dispatch);\n}\n"],"mappings":"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","names":[]}
|
package/dist/sdk-info.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentful/experiences-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Delivery client + fetchExperience for Contentful Experiences",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@contentful/experience-delivery": "1.0.0-dev.9",
|
|
34
|
-
"@contentful/experiences-sdk-core": "0.
|
|
34
|
+
"@contentful/experiences-sdk-core": "0.10.0",
|
|
35
35
|
"@contentful/optimization-api-client": "^2.0.1",
|
|
36
36
|
"es-toolkit": "^1.46.0",
|
|
37
37
|
"zod": "^4.3.6"
|
package/dist/create-client.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ContentfulViewDeliveryClient } from '@contentful/experience-delivery';
|
|
2
|
-
|
|
3
|
-
type CreateClientOptions = {
|
|
4
|
-
accessToken: string;
|
|
5
|
-
/**
|
|
6
|
-
* Base URL for the delivery client. Defaults to `DELIVERY_HOST` when omitted.
|
|
7
|
-
* Pass `PREVIEW_HOST` for preview mode, or any custom URL (staging, proxy,
|
|
8
|
-
* per-region). Both constants are exported from this package.
|
|
9
|
-
*/
|
|
10
|
-
host?: string;
|
|
11
|
-
} & Omit<ContentfulViewDeliveryClient.Options, 'token' | 'baseUrl'>;
|
|
12
|
-
declare function createClient(options: CreateClientOptions): ContentfulViewDeliveryClient;
|
|
13
|
-
|
|
14
|
-
export { type CreateClientOptions, createClient };
|
package/dist/create-client.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ContentfulViewDeliveryClient } from "@contentful/experience-delivery";
|
|
2
|
-
function createClient(options) {
|
|
3
|
-
const { accessToken, host, ...rest } = options;
|
|
4
|
-
return new ContentfulViewDeliveryClient({
|
|
5
|
-
...rest,
|
|
6
|
-
token: accessToken,
|
|
7
|
-
baseUrl: host
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
export {
|
|
11
|
-
createClient
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=create-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/create-client.ts"],"sourcesContent":["import { ContentfulViewDeliveryClient } from '@contentful/experience-delivery';\n\nexport type CreateClientOptions = {\n accessToken: string;\n /**\n * Base URL for the delivery client. Defaults to `DELIVERY_HOST` when omitted.\n * Pass `PREVIEW_HOST` for preview mode, or any custom URL (staging, proxy,\n * per-region). Both constants are exported from this package.\n */\n host?: string;\n} & Omit<ContentfulViewDeliveryClient.Options, 'token' | 'baseUrl'>;\n\nexport function createClient(options: CreateClientOptions): ContentfulViewDeliveryClient {\n const { accessToken, host, ...rest } = options;\n return new ContentfulViewDeliveryClient({\n ...rest,\n token: accessToken,\n baseUrl: host,\n });\n}\n"],"mappings":"AAAA,SAAS,oCAAoC;AAYtC,SAAS,aAAa,SAA4D;AACvF,QAAM,EAAE,aAAa,MAAM,GAAG,KAAK,IAAI;AACvC,SAAO,IAAI,6BAA6B;AAAA,IACtC,GAAG;AAAA,IACH,OAAO;AAAA,IACP,SAAS;AAAA,EACX,CAAC;AACH;","names":[]}
|