@23blocks/block-onboarding 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.
Files changed (37) hide show
  1. package/dist/index.js +7 -0
  2. package/dist/index.js.map +1 -0
  3. package/dist/lib/mappers/flow.mapper.js +21 -0
  4. package/dist/lib/mappers/flow.mapper.js.map +1 -0
  5. package/dist/lib/mappers/index.js +7 -0
  6. package/dist/lib/mappers/index.js.map +1 -0
  7. package/dist/lib/mappers/onboarding.mapper.js +19 -0
  8. package/dist/lib/mappers/onboarding.mapper.js.map +1 -0
  9. package/dist/lib/mappers/user-identity.mapper.js +20 -0
  10. package/dist/lib/mappers/user-identity.mapper.js.map +1 -0
  11. package/dist/lib/mappers/user-journey.mapper.js +22 -0
  12. package/dist/lib/mappers/user-journey.mapper.js.map +1 -0
  13. package/dist/lib/mappers/utils.js +117 -0
  14. package/dist/lib/mappers/utils.js.map +1 -0
  15. package/dist/lib/onboarding.block.js +22 -0
  16. package/dist/lib/onboarding.block.js.map +1 -0
  17. package/dist/lib/services/flows.service.js +67 -0
  18. package/dist/lib/services/flows.service.js.map +1 -0
  19. package/dist/lib/services/index.js +6 -0
  20. package/dist/lib/services/index.js.map +1 -0
  21. package/dist/lib/services/onboardings.service.js +59 -0
  22. package/dist/lib/services/onboardings.service.js.map +1 -0
  23. package/dist/lib/services/user-identities.service.js +59 -0
  24. package/dist/lib/services/user-identities.service.js.map +1 -0
  25. package/dist/lib/services/user-journeys.service.js +74 -0
  26. package/dist/lib/services/user-journeys.service.js.map +1 -0
  27. package/dist/lib/types/flow.js +3 -0
  28. package/dist/lib/types/flow.js.map +1 -0
  29. package/dist/lib/types/index.js +6 -0
  30. package/dist/lib/types/index.js.map +1 -0
  31. package/dist/lib/types/onboarding.js +3 -0
  32. package/dist/lib/types/onboarding.js.map +1 -0
  33. package/dist/lib/types/user-identity.js +3 -0
  34. package/dist/lib/types/user-identity.js.map +1 -0
  35. package/dist/lib/types/user-journey.js +3 -0
  36. package/dist/lib/types/user-journey.js.map +1 -0
  37. package/package.json +63 -0
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ // Block factory and metadata
2
+ export { createOnboardingBlock, onboardingBlockMetadata } from './lib/onboarding.block';
3
+ export { createOnboardingsService, createFlowsService, createUserJourneysService, createUserIdentitiesService } from './lib/services';
4
+ // Mappers (for advanced use cases)
5
+ export { onboardingMapper, flowMapper, userJourneyMapper, userIdentityMapper } from './lib/mappers';
6
+
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Block factory and metadata\nexport { createOnboardingBlock, onboardingBlockMetadata } from './lib/onboarding.block';\nexport type { OnboardingBlock, OnboardingBlockConfig } from './lib/onboarding.block';\n\n// Types\nexport type {\n // Onboarding types\n Onboarding,\n CreateOnboardingRequest,\n UpdateOnboardingRequest,\n ListOnboardingsParams,\n // Flow types\n Flow,\n CreateFlowRequest,\n UpdateFlowRequest,\n ListFlowsParams,\n // User Journey types\n UserJourney,\n UserJourneyStatus,\n StartJourneyRequest,\n CompleteStepRequest,\n ListUserJourneysParams,\n // User Identity types\n UserIdentity,\n CreateUserIdentityRequest,\n VerifyUserIdentityRequest,\n ListUserIdentitiesParams,\n} from './lib/types';\n\n// Services\nexport type {\n OnboardingsService,\n FlowsService,\n UserJourneysService,\n UserIdentitiesService,\n} from './lib/services';\n\nexport {\n createOnboardingsService,\n createFlowsService,\n createUserJourneysService,\n createUserIdentitiesService,\n} from './lib/services';\n\n// Mappers (for advanced use cases)\nexport {\n onboardingMapper,\n flowMapper,\n userJourneyMapper,\n userIdentityMapper,\n} from './lib/mappers';\n"],"names":["createOnboardingBlock","onboardingBlockMetadata","createOnboardingsService","createFlowsService","createUserJourneysService","createUserIdentitiesService","onboardingMapper","flowMapper","userJourneyMapper","userIdentityMapper"],"rangeMappings":";;;;","mappings":"AAAA,6BAA6B;AAC7B,SAASA,qBAAqB,EAAEC,uBAAuB,QAAQ,yBAAyB;AAoCxF,SACEC,wBAAwB,EACxBC,kBAAkB,EAClBC,yBAAyB,EACzBC,2BAA2B,QACtB,iBAAiB;AAExB,mCAAmC;AACnC,SACEC,gBAAgB,EAChBC,UAAU,EACVC,iBAAiB,EACjBC,kBAAkB,QACb,gBAAgB"}
@@ -0,0 +1,21 @@
1
+ import { parseString, parseDate, parseBoolean, parseStatus, parseObjectArray, parseObject } from './utils';
2
+ export const flowMapper = {
3
+ type: 'Flow',
4
+ map: (resource)=>({
5
+ id: resource.id,
6
+ uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
7
+ createdAt: parseDate(resource.attributes['created_at']) || new Date(),
8
+ updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
9
+ onboardingUniqueId: parseString(resource.attributes['onboarding_unique_id']) || '',
10
+ code: parseString(resource.attributes['code']) || '',
11
+ name: parseString(resource.attributes['name']) || '',
12
+ description: parseString(resource.attributes['description']),
13
+ steps: parseObjectArray(resource.attributes['steps']),
14
+ conditions: parseObject(resource.attributes['conditions']),
15
+ status: parseStatus(resource.attributes['status']),
16
+ enabled: parseBoolean(resource.attributes['enabled']),
17
+ payload: resource.attributes['payload']
18
+ })
19
+ };
20
+
21
+ //# sourceMappingURL=flow.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/flow.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { Flow } from '../types/flow';\nimport { parseString, parseDate, parseBoolean, parseStatus, parseObjectArray, parseObject } from './utils';\n\nexport const flowMapper: ResourceMapper<Flow> = {\n type: 'Flow',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n onboardingUniqueId: parseString(resource.attributes['onboarding_unique_id']) || '',\n code: parseString(resource.attributes['code']) || '',\n name: parseString(resource.attributes['name']) || '',\n description: parseString(resource.attributes['description']),\n steps: parseObjectArray(resource.attributes['steps']),\n conditions: parseObject(resource.attributes['conditions']),\n status: parseStatus(resource.attributes['status']),\n enabled: parseBoolean(resource.attributes['enabled']),\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n }),\n};\n"],"names":["parseString","parseDate","parseBoolean","parseStatus","parseObjectArray","parseObject","flowMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","onboardingUniqueId","code","name","description","steps","conditions","status","enabled","payload"],"rangeMappings":";;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,WAAW,EAAEC,gBAAgB,EAAEC,WAAW,QAAQ,UAAU;AAE3G,OAAO,MAAMC,aAAmC;IAC9CC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUX,YAAYS,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWZ,UAAUQ,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWd,UAAUQ,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,oBAAoBhB,YAAYS,SAASG,UAAU,CAAC,uBAAuB,KAAK;YAChFK,MAAMjB,YAAYS,SAASG,UAAU,CAAC,OAAO,KAAK;YAClDM,MAAMlB,YAAYS,SAASG,UAAU,CAAC,OAAO,KAAK;YAClDO,aAAanB,YAAYS,SAASG,UAAU,CAAC,cAAc;YAC3DQ,OAAOhB,iBAAiBK,SAASG,UAAU,CAAC,QAAQ;YACpDS,YAAYhB,YAAYI,SAASG,UAAU,CAAC,aAAa;YACzDU,QAAQnB,YAAYM,SAASG,UAAU,CAAC,SAAS;YACjDW,SAASrB,aAAaO,SAASG,UAAU,CAAC,UAAU;YACpDY,SAASf,SAASG,UAAU,CAAC,UAAU;QACzC,CAAA;AACF,EAAE"}
@@ -0,0 +1,7 @@
1
+ export * from './onboarding.mapper';
2
+ export * from './flow.mapper';
3
+ export * from './user-journey.mapper';
4
+ export * from './user-identity.mapper';
5
+ export * from './utils';
6
+
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/index.ts"],"sourcesContent":["export * from './onboarding.mapper';\nexport * from './flow.mapper';\nexport * from './user-journey.mapper';\nexport * from './user-identity.mapper';\nexport * from './utils';\n"],"names":[],"rangeMappings":";;;;","mappings":"AAAA,cAAc,sBAAsB;AACpC,cAAc,gBAAgB;AAC9B,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,UAAU"}
@@ -0,0 +1,19 @@
1
+ import { parseString, parseDate, parseBoolean, parseStatus, parseObjectArray } from './utils';
2
+ export const onboardingMapper = {
3
+ type: 'Onboarding',
4
+ map: (resource)=>({
5
+ id: resource.id,
6
+ uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
7
+ createdAt: parseDate(resource.attributes['created_at']) || new Date(),
8
+ updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
9
+ code: parseString(resource.attributes['code']) || '',
10
+ name: parseString(resource.attributes['name']) || '',
11
+ description: parseString(resource.attributes['description']),
12
+ steps: parseObjectArray(resource.attributes['steps']),
13
+ status: parseStatus(resource.attributes['status']),
14
+ enabled: parseBoolean(resource.attributes['enabled']),
15
+ payload: resource.attributes['payload']
16
+ })
17
+ };
18
+
19
+ //# sourceMappingURL=onboarding.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/onboarding.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { Onboarding } from '../types/onboarding';\nimport { parseString, parseDate, parseBoolean, parseStatus, parseObjectArray } from './utils';\n\nexport const onboardingMapper: ResourceMapper<Onboarding> = {\n type: 'Onboarding',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n code: parseString(resource.attributes['code']) || '',\n name: parseString(resource.attributes['name']) || '',\n description: parseString(resource.attributes['description']),\n steps: parseObjectArray(resource.attributes['steps']),\n status: parseStatus(resource.attributes['status']),\n enabled: parseBoolean(resource.attributes['enabled']),\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n }),\n};\n"],"names":["parseString","parseDate","parseBoolean","parseStatus","parseObjectArray","onboardingMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","code","name","description","steps","status","enabled","payload"],"rangeMappings":";;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,WAAW,EAAEC,gBAAgB,QAAQ,UAAU;AAE9F,OAAO,MAAMC,mBAA+C;IAC1DC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUV,YAAYQ,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWX,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWb,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,MAAMf,YAAYQ,SAASG,UAAU,CAAC,OAAO,KAAK;YAClDK,MAAMhB,YAAYQ,SAASG,UAAU,CAAC,OAAO,KAAK;YAClDM,aAAajB,YAAYQ,SAASG,UAAU,CAAC,cAAc;YAC3DO,OAAOd,iBAAiBI,SAASG,UAAU,CAAC,QAAQ;YACpDQ,QAAQhB,YAAYK,SAASG,UAAU,CAAC,SAAS;YACjDS,SAASlB,aAAaM,SAASG,UAAU,CAAC,UAAU;YACpDU,SAASb,SAASG,UAAU,CAAC,UAAU;QACzC,CAAA;AACF,EAAE"}
@@ -0,0 +1,20 @@
1
+ import { parseString, parseDate, parseBoolean, parseStatus } from './utils';
2
+ export const userIdentityMapper = {
3
+ type: 'UserIdentity',
4
+ map: (resource)=>({
5
+ id: resource.id,
6
+ uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
7
+ createdAt: parseDate(resource.attributes['created_at']) || new Date(),
8
+ updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
9
+ userUniqueId: parseString(resource.attributes['user_unique_id']) || '',
10
+ identityType: parseString(resource.attributes['identity_type']) || '',
11
+ identityValue: parseString(resource.attributes['identity_value']) || '',
12
+ verified: parseBoolean(resource.attributes['verified']),
13
+ verifiedAt: parseDate(resource.attributes['verified_at']),
14
+ status: parseStatus(resource.attributes['status']),
15
+ enabled: parseBoolean(resource.attributes['enabled']),
16
+ payload: resource.attributes['payload']
17
+ })
18
+ };
19
+
20
+ //# sourceMappingURL=user-identity.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/user-identity.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { UserIdentity } from '../types/user-identity';\nimport { parseString, parseDate, parseBoolean, parseStatus } from './utils';\n\nexport const userIdentityMapper: ResourceMapper<UserIdentity> = {\n type: 'UserIdentity',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n userUniqueId: parseString(resource.attributes['user_unique_id']) || '',\n identityType: parseString(resource.attributes['identity_type']) || '',\n identityValue: parseString(resource.attributes['identity_value']) || '',\n verified: parseBoolean(resource.attributes['verified']),\n verifiedAt: parseDate(resource.attributes['verified_at']),\n status: parseStatus(resource.attributes['status']),\n enabled: parseBoolean(resource.attributes['enabled']),\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n }),\n};\n"],"names":["parseString","parseDate","parseBoolean","parseStatus","userIdentityMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","userUniqueId","identityType","identityValue","verified","verifiedAt","status","enabled","payload"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,WAAW,QAAQ,UAAU;AAE5E,OAAO,MAAMC,qBAAmD;IAC9DC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUT,YAAYO,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWV,UAAUM,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWZ,UAAUM,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,cAAcd,YAAYO,SAASG,UAAU,CAAC,iBAAiB,KAAK;YACpEK,cAAcf,YAAYO,SAASG,UAAU,CAAC,gBAAgB,KAAK;YACnEM,eAAehB,YAAYO,SAASG,UAAU,CAAC,iBAAiB,KAAK;YACrEO,UAAUf,aAAaK,SAASG,UAAU,CAAC,WAAW;YACtDQ,YAAYjB,UAAUM,SAASG,UAAU,CAAC,cAAc;YACxDS,QAAQhB,YAAYI,SAASG,UAAU,CAAC,SAAS;YACjDU,SAASlB,aAAaK,SAASG,UAAU,CAAC,UAAU;YACpDW,SAASd,SAASG,UAAU,CAAC,UAAU;QACzC,CAAA;AACF,EAAE"}
@@ -0,0 +1,22 @@
1
+ import { parseString, parseDate, parseOptionalNumber, parseNumberArray, parseJourneyStatus } from './utils';
2
+ export const userJourneyMapper = {
3
+ type: 'UserJourney',
4
+ map: (resource)=>({
5
+ id: resource.id,
6
+ uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
7
+ createdAt: parseDate(resource.attributes['created_at']) || new Date(),
8
+ updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
9
+ userUniqueId: parseString(resource.attributes['user_unique_id']) || '',
10
+ onboardingUniqueId: parseString(resource.attributes['onboarding_unique_id']) || '',
11
+ flowUniqueId: parseString(resource.attributes['flow_unique_id']),
12
+ currentStep: parseOptionalNumber(resource.attributes['current_step']),
13
+ completedSteps: parseNumberArray(resource.attributes['completed_steps']),
14
+ progress: parseOptionalNumber(resource.attributes['progress']),
15
+ startedAt: parseDate(resource.attributes['started_at']) || new Date(),
16
+ completedAt: parseDate(resource.attributes['completed_at']),
17
+ status: parseJourneyStatus(resource.attributes['status']),
18
+ payload: resource.attributes['payload']
19
+ })
20
+ };
21
+
22
+ //# sourceMappingURL=user-journey.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/user-journey.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { UserJourney } from '../types/user-journey';\nimport { parseString, parseDate, parseOptionalNumber, parseNumberArray, parseJourneyStatus } from './utils';\n\nexport const userJourneyMapper: ResourceMapper<UserJourney> = {\n type: 'UserJourney',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n userUniqueId: parseString(resource.attributes['user_unique_id']) || '',\n onboardingUniqueId: parseString(resource.attributes['onboarding_unique_id']) || '',\n flowUniqueId: parseString(resource.attributes['flow_unique_id']),\n currentStep: parseOptionalNumber(resource.attributes['current_step']),\n completedSteps: parseNumberArray(resource.attributes['completed_steps']),\n progress: parseOptionalNumber(resource.attributes['progress']),\n startedAt: parseDate(resource.attributes['started_at']) || new Date(),\n completedAt: parseDate(resource.attributes['completed_at']),\n status: parseJourneyStatus(resource.attributes['status']),\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n }),\n};\n"],"names":["parseString","parseDate","parseOptionalNumber","parseNumberArray","parseJourneyStatus","userJourneyMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","userUniqueId","onboardingUniqueId","flowUniqueId","currentStep","completedSteps","progress","startedAt","completedAt","status","payload"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,mBAAmB,EAAEC,gBAAgB,EAAEC,kBAAkB,QAAQ,UAAU;AAE5G,OAAO,MAAMC,oBAAiD;IAC5DC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUV,YAAYQ,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWX,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWb,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,cAAcf,YAAYQ,SAASG,UAAU,CAAC,iBAAiB,KAAK;YACpEK,oBAAoBhB,YAAYQ,SAASG,UAAU,CAAC,uBAAuB,KAAK;YAChFM,cAAcjB,YAAYQ,SAASG,UAAU,CAAC,iBAAiB;YAC/DO,aAAahB,oBAAoBM,SAASG,UAAU,CAAC,eAAe;YACpEQ,gBAAgBhB,iBAAiBK,SAASG,UAAU,CAAC,kBAAkB;YACvES,UAAUlB,oBAAoBM,SAASG,UAAU,CAAC,WAAW;YAC7DU,WAAWpB,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DS,aAAarB,UAAUO,SAASG,UAAU,CAAC,eAAe;YAC1DY,QAAQnB,mBAAmBI,SAASG,UAAU,CAAC,SAAS;YACxDa,SAAShB,SAASG,UAAU,CAAC,UAAU;QACzC,CAAA;AACF,EAAE"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Parse a string value, returning undefined for empty/undefined
3
+ */ export function parseString(value) {
4
+ if (value === null || value === undefined) {
5
+ return undefined;
6
+ }
7
+ const str = String(value);
8
+ return str.length > 0 ? str : undefined;
9
+ }
10
+ /**
11
+ * Parse a date value
12
+ */ export function parseDate(value) {
13
+ if (value === null || value === undefined) {
14
+ return undefined;
15
+ }
16
+ if (value instanceof Date) {
17
+ return value;
18
+ }
19
+ if (typeof value === 'string' || typeof value === 'number') {
20
+ const date = new Date(value);
21
+ return isNaN(date.getTime()) ? undefined : date;
22
+ }
23
+ return undefined;
24
+ }
25
+ /**
26
+ * Parse a boolean value
27
+ */ export function parseBoolean(value) {
28
+ if (typeof value === 'boolean') {
29
+ return value;
30
+ }
31
+ if (value === 'true' || value === '1' || value === 1) {
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ /**
37
+ * Parse an array of strings
38
+ */ export function parseStringArray(value) {
39
+ if (value === null || value === undefined) {
40
+ return undefined;
41
+ }
42
+ if (Array.isArray(value)) {
43
+ return value.map(String);
44
+ }
45
+ return undefined;
46
+ }
47
+ /**
48
+ * Parse a number value
49
+ */ export function parseNumber(value) {
50
+ if (value === null || value === undefined) {
51
+ return 0;
52
+ }
53
+ const num = Number(value);
54
+ return isNaN(num) ? 0 : num;
55
+ }
56
+ /**
57
+ * Parse an optional number value
58
+ */ export function parseOptionalNumber(value) {
59
+ if (value === null || value === undefined) {
60
+ return undefined;
61
+ }
62
+ const num = Number(value);
63
+ return isNaN(num) ? undefined : num;
64
+ }
65
+ /**
66
+ * Parse entity status
67
+ */ export function parseStatus(value) {
68
+ const status = parseString(value);
69
+ if (status === 'active' || status === 'inactive' || status === 'pending' || status === 'archived' || status === 'deleted') {
70
+ return status;
71
+ }
72
+ return 'active';
73
+ }
74
+ /**
75
+ * Parse user journey status
76
+ */ export function parseJourneyStatus(value) {
77
+ const status = parseString(value);
78
+ if (status === 'active' || status === 'completed' || status === 'abandoned') {
79
+ return status;
80
+ }
81
+ return 'active';
82
+ }
83
+ /**
84
+ * Parse array of numbers
85
+ */ export function parseNumberArray(value) {
86
+ if (value === null || value === undefined) {
87
+ return undefined;
88
+ }
89
+ if (Array.isArray(value)) {
90
+ return value.map(Number).filter((num)=>!isNaN(num));
91
+ }
92
+ return undefined;
93
+ }
94
+ /**
95
+ * Parse array of objects
96
+ */ export function parseObjectArray(value) {
97
+ if (value === null || value === undefined) {
98
+ return undefined;
99
+ }
100
+ if (Array.isArray(value)) {
101
+ return value;
102
+ }
103
+ return undefined;
104
+ }
105
+ /**
106
+ * Parse object
107
+ */ export function parseObject(value) {
108
+ if (value === null || value === undefined) {
109
+ return undefined;
110
+ }
111
+ if (typeof value === 'object' && !Array.isArray(value)) {
112
+ return value;
113
+ }
114
+ return undefined;
115
+ }
116
+
117
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/mappers/utils.ts"],"sourcesContent":["/**\n * Parse a string value, returning undefined for empty/undefined\n */\nexport function parseString(value: unknown): string | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n const str = String(value);\n return str.length > 0 ? str : undefined;\n}\n\n/**\n * Parse a date value\n */\nexport function parseDate(value: unknown): Date | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (value instanceof Date) {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n const date = new Date(value);\n return isNaN(date.getTime()) ? undefined : date;\n }\n\n return undefined;\n}\n\n/**\n * Parse a boolean value\n */\nexport function parseBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (value === 'true' || value === '1' || value === 1) {\n return true;\n }\n return false;\n}\n\n/**\n * Parse an array of strings\n */\nexport function parseStringArray(value: unknown): string[] | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value.map(String);\n }\n return undefined;\n}\n\n/**\n * Parse a number value\n */\nexport function parseNumber(value: unknown): number {\n if (value === null || value === undefined) {\n return 0;\n }\n const num = Number(value);\n return isNaN(num) ? 0 : num;\n}\n\n/**\n * Parse an optional number value\n */\nexport function parseOptionalNumber(value: unknown): number | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n const num = Number(value);\n return isNaN(num) ? undefined : num;\n}\n\n/**\n * Parse entity status\n */\nexport function parseStatus(value: unknown): 'active' | 'inactive' | 'pending' | 'archived' | 'deleted' {\n const status = parseString(value);\n if (status === 'active' || status === 'inactive' || status === 'pending' || status === 'archived' || status === 'deleted') {\n return status;\n }\n return 'active';\n}\n\n/**\n * Parse user journey status\n */\nexport function parseJourneyStatus(value: unknown): 'active' | 'completed' | 'abandoned' {\n const status = parseString(value);\n if (status === 'active' || status === 'completed' || status === 'abandoned') {\n return status;\n }\n return 'active';\n}\n\n/**\n * Parse array of numbers\n */\nexport function parseNumberArray(value: unknown): number[] | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value.map(Number).filter(num => !isNaN(num));\n }\n return undefined;\n}\n\n/**\n * Parse array of objects\n */\nexport function parseObjectArray(value: unknown): Record<string, unknown>[] | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value as Record<string, unknown>[];\n }\n return undefined;\n}\n\n/**\n * Parse object\n */\nexport function parseObject(value: unknown): Record<string, unknown> | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return undefined;\n}\n"],"names":["parseString","value","undefined","str","String","length","parseDate","Date","date","isNaN","getTime","parseBoolean","parseStringArray","Array","isArray","map","parseNumber","num","Number","parseOptionalNumber","parseStatus","status","parseJourneyStatus","parseNumberArray","filter","parseObjectArray","parseObject"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;CAEC,GACD,OAAO,SAASA,YAAYC,KAAc;IACxC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,MAAMC,MAAMC,OAAOH;IACnB,OAAOE,IAAIE,MAAM,GAAG,IAAIF,MAAMD;AAChC;AAEA;;CAEC,GACD,OAAO,SAASI,UAAUL,KAAc;IACtC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IAEA,IAAID,iBAAiBM,MAAM;QACzB,OAAON;IACT;IAEA,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,UAAU;QAC1D,MAAMO,OAAO,IAAID,KAAKN;QACtB,OAAOQ,MAAMD,KAAKE,OAAO,MAAMR,YAAYM;IAC7C;IAEA,OAAON;AACT;AAEA;;CAEC,GACD,OAAO,SAASS,aAAaV,KAAc;IACzC,IAAI,OAAOA,UAAU,WAAW;QAC9B,OAAOA;IACT;IACA,IAAIA,UAAU,UAAUA,UAAU,OAAOA,UAAU,GAAG;QACpD,OAAO;IACT;IACA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASW,iBAAiBX,KAAc;IAC7C,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,IAAIW,MAAMC,OAAO,CAACb,QAAQ;QACxB,OAAOA,MAAMc,GAAG,CAACX;IACnB;IACA,OAAOF;AACT;AAEA;;CAEC,GACD,OAAO,SAASc,YAAYf,KAAc;IACxC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAO;IACT;IACA,MAAMe,MAAMC,OAAOjB;IACnB,OAAOQ,MAAMQ,OAAO,IAAIA;AAC1B;AAEA;;CAEC,GACD,OAAO,SAASE,oBAAoBlB,KAAc;IAChD,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,MAAMe,MAAMC,OAAOjB;IACnB,OAAOQ,MAAMQ,OAAOf,YAAYe;AAClC;AAEA;;CAEC,GACD,OAAO,SAASG,YAAYnB,KAAc;IACxC,MAAMoB,SAASrB,YAAYC;IAC3B,IAAIoB,WAAW,YAAYA,WAAW,cAAcA,WAAW,aAAaA,WAAW,cAAcA,WAAW,WAAW;QACzH,OAAOA;IACT;IACA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASC,mBAAmBrB,KAAc;IAC/C,MAAMoB,SAASrB,YAAYC;IAC3B,IAAIoB,WAAW,YAAYA,WAAW,eAAeA,WAAW,aAAa;QAC3E,OAAOA;IACT;IACA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASE,iBAAiBtB,KAAc;IAC7C,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,IAAIW,MAAMC,OAAO,CAACb,QAAQ;QACxB,OAAOA,MAAMc,GAAG,CAACG,QAAQM,MAAM,CAACP,CAAAA,MAAO,CAACR,MAAMQ;IAChD;IACA,OAAOf;AACT;AAEA;;CAEC,GACD,OAAO,SAASuB,iBAAiBxB,KAAc;IAC7C,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,IAAIW,MAAMC,OAAO,CAACb,QAAQ;QACxB,OAAOA;IACT;IACA,OAAOC;AACT;AAEA;;CAEC,GACD,OAAO,SAASwB,YAAYzB,KAAc;IACxC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,IAAI,OAAOD,UAAU,YAAY,CAACY,MAAMC,OAAO,CAACb,QAAQ;QACtD,OAAOA;IACT;IACA,OAAOC;AACT"}
@@ -0,0 +1,22 @@
1
+ import { createOnboardingsService, createFlowsService, createUserJourneysService, createUserIdentitiesService } from './services';
2
+ export function createOnboardingBlock(transport, config) {
3
+ return {
4
+ onboardings: createOnboardingsService(transport, config),
5
+ flows: createFlowsService(transport, config),
6
+ userJourneys: createUserJourneysService(transport, config),
7
+ userIdentities: createUserIdentitiesService(transport, config)
8
+ };
9
+ }
10
+ export const onboardingBlockMetadata = {
11
+ name: 'onboarding',
12
+ version: '0.1.0',
13
+ description: 'User onboarding, flows, journeys, and identity verification',
14
+ resourceTypes: [
15
+ 'Onboarding',
16
+ 'Flow',
17
+ 'UserJourney',
18
+ 'UserIdentity'
19
+ ]
20
+ };
21
+
22
+ //# sourceMappingURL=onboarding.block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/onboarding.block.ts"],"sourcesContent":["import type { Transport, BlockConfig, BlockMetadata } from '@23blocks/contracts';\nimport {\n createOnboardingsService,\n createFlowsService,\n createUserJourneysService,\n createUserIdentitiesService,\n type OnboardingsService,\n type FlowsService,\n type UserJourneysService,\n type UserIdentitiesService,\n} from './services';\n\nexport interface OnboardingBlockConfig extends BlockConfig {\n appId: string;\n tenantId?: string;\n}\n\nexport interface OnboardingBlock {\n onboardings: OnboardingsService;\n flows: FlowsService;\n userJourneys: UserJourneysService;\n userIdentities: UserIdentitiesService;\n}\n\nexport function createOnboardingBlock(\n transport: Transport,\n config: OnboardingBlockConfig\n): OnboardingBlock {\n return {\n onboardings: createOnboardingsService(transport, config),\n flows: createFlowsService(transport, config),\n userJourneys: createUserJourneysService(transport, config),\n userIdentities: createUserIdentitiesService(transport, config),\n };\n}\n\nexport const onboardingBlockMetadata: BlockMetadata = {\n name: 'onboarding',\n version: '0.1.0',\n description: 'User onboarding, flows, journeys, and identity verification',\n resourceTypes: [\n 'Onboarding',\n 'Flow',\n 'UserJourney',\n 'UserIdentity',\n ],\n};\n"],"names":["createOnboardingsService","createFlowsService","createUserJourneysService","createUserIdentitiesService","createOnboardingBlock","transport","config","onboardings","flows","userJourneys","userIdentities","onboardingBlockMetadata","name","version","description","resourceTypes"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":"AACA,SACEA,wBAAwB,EACxBC,kBAAkB,EAClBC,yBAAyB,EACzBC,2BAA2B,QAKtB,aAAa;AAcpB,OAAO,SAASC,sBACdC,SAAoB,EACpBC,MAA6B;IAE7B,OAAO;QACLC,aAAaP,yBAAyBK,WAAWC;QACjDE,OAAOP,mBAAmBI,WAAWC;QACrCG,cAAcP,0BAA0BG,WAAWC;QACnDI,gBAAgBP,4BAA4BE,WAAWC;IACzD;AACF;AAEA,OAAO,MAAMK,0BAAyC;IACpDC,MAAM;IACNC,SAAS;IACTC,aAAa;IACbC,eAAe;QACb;QACA;QACA;QACA;KACD;AACH,EAAE"}
@@ -0,0 +1,67 @@
1
+ import { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';
2
+ import { flowMapper } from '../mappers/flow.mapper';
3
+ export function createFlowsService(transport, _config) {
4
+ return {
5
+ async list (params) {
6
+ const queryParams = {};
7
+ if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
8
+ if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
9
+ if (params == null ? void 0 : params.onboardingUniqueId) queryParams['onboarding_unique_id'] = params.onboardingUniqueId;
10
+ if (params == null ? void 0 : params.status) queryParams['status'] = params.status;
11
+ if ((params == null ? void 0 : params.enabled) !== undefined) queryParams['enabled'] = String(params.enabled);
12
+ if (params == null ? void 0 : params.search) queryParams['search'] = params.search;
13
+ if (params == null ? void 0 : params.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;
14
+ const response = await transport.get('/flows', {
15
+ params: queryParams
16
+ });
17
+ return decodePageResult(response, flowMapper);
18
+ },
19
+ async get (uniqueId) {
20
+ const response = await transport.get(`/flows/${uniqueId}`);
21
+ return decodeOne(response, flowMapper);
22
+ },
23
+ async create (data) {
24
+ const response = await transport.post('/flows', {
25
+ data: {
26
+ type: 'Flow',
27
+ attributes: {
28
+ onboarding_unique_id: data.onboardingUniqueId,
29
+ code: data.code,
30
+ name: data.name,
31
+ description: data.description,
32
+ steps: data.steps,
33
+ conditions: data.conditions,
34
+ payload: data.payload
35
+ }
36
+ }
37
+ });
38
+ return decodeOne(response, flowMapper);
39
+ },
40
+ async update (uniqueId, data) {
41
+ const response = await transport.put(`/flows/${uniqueId}`, {
42
+ data: {
43
+ type: 'Flow',
44
+ attributes: {
45
+ name: data.name,
46
+ description: data.description,
47
+ steps: data.steps,
48
+ conditions: data.conditions,
49
+ enabled: data.enabled,
50
+ status: data.status,
51
+ payload: data.payload
52
+ }
53
+ }
54
+ });
55
+ return decodeOne(response, flowMapper);
56
+ },
57
+ async delete (uniqueId) {
58
+ await transport.delete(`/flows/${uniqueId}`);
59
+ },
60
+ async listByOnboarding (onboardingUniqueId) {
61
+ const response = await transport.get(`/onboardings/${onboardingUniqueId}/flows`);
62
+ return decodeMany(response, flowMapper);
63
+ }
64
+ };
65
+ }
66
+
67
+ //# sourceMappingURL=flows.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/services/flows.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n Flow,\n CreateFlowRequest,\n UpdateFlowRequest,\n ListFlowsParams,\n} from '../types/flow';\nimport { flowMapper } from '../mappers/flow.mapper';\n\nexport interface FlowsService {\n list(params?: ListFlowsParams): Promise<PageResult<Flow>>;\n get(uniqueId: string): Promise<Flow>;\n create(data: CreateFlowRequest): Promise<Flow>;\n update(uniqueId: string, data: UpdateFlowRequest): Promise<Flow>;\n delete(uniqueId: string): Promise<void>;\n listByOnboarding(onboardingUniqueId: string): Promise<Flow[]>;\n}\n\nexport function createFlowsService(transport: Transport, _config: { appId: string }): FlowsService {\n return {\n async list(params?: ListFlowsParams): Promise<PageResult<Flow>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.onboardingUniqueId) queryParams['onboarding_unique_id'] = params.onboardingUniqueId;\n if (params?.status) queryParams['status'] = params.status;\n if (params?.enabled !== undefined) queryParams['enabled'] = String(params.enabled);\n if (params?.search) queryParams['search'] = params.search;\n if (params?.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;\n\n const response = await transport.get<unknown>('/flows', { params: queryParams });\n return decodePageResult(response, flowMapper);\n },\n\n async get(uniqueId: string): Promise<Flow> {\n const response = await transport.get<unknown>(`/flows/${uniqueId}`);\n return decodeOne(response, flowMapper);\n },\n\n async create(data: CreateFlowRequest): Promise<Flow> {\n const response = await transport.post<unknown>('/flows', {\n data: {\n type: 'Flow',\n attributes: {\n onboarding_unique_id: data.onboardingUniqueId,\n code: data.code,\n name: data.name,\n description: data.description,\n steps: data.steps,\n conditions: data.conditions,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, flowMapper);\n },\n\n async update(uniqueId: string, data: UpdateFlowRequest): Promise<Flow> {\n const response = await transport.put<unknown>(`/flows/${uniqueId}`, {\n data: {\n type: 'Flow',\n attributes: {\n name: data.name,\n description: data.description,\n steps: data.steps,\n conditions: data.conditions,\n enabled: data.enabled,\n status: data.status,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, flowMapper);\n },\n\n async delete(uniqueId: string): Promise<void> {\n await transport.delete(`/flows/${uniqueId}`);\n },\n\n async listByOnboarding(onboardingUniqueId: string): Promise<Flow[]> {\n const response = await transport.get<unknown>(`/onboardings/${onboardingUniqueId}/flows`);\n return decodeMany(response, flowMapper);\n },\n };\n}\n"],"names":["decodeOne","decodeMany","decodePageResult","flowMapper","createFlowsService","transport","_config","list","params","queryParams","page","String","perPage","onboardingUniqueId","status","enabled","undefined","search","sortBy","sortOrder","response","get","uniqueId","create","data","post","type","attributes","onboarding_unique_id","code","name","description","steps","conditions","payload","update","put","delete","listByOnboarding"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,SAAS,EAAEC,UAAU,EAAEC,gBAAgB,QAAQ,0BAA0B;AAOlF,SAASC,UAAU,QAAQ,yBAAyB;AAWpD,OAAO,SAASC,mBAAmBC,SAAoB,EAAEC,OAA0B;IACjF,OAAO;QACL,MAAMC,MAAKC,MAAwB;YACjC,MAAMC,cAAsC,CAAC;YAC7C,IAAID,0BAAAA,OAAQE,IAAI,EAAED,WAAW,CAAC,OAAO,GAAGE,OAAOH,OAAOE,IAAI;YAC1D,IAAIF,0BAAAA,OAAQI,OAAO,EAAEH,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOI,OAAO;YACnE,IAAIJ,0BAAAA,OAAQK,kBAAkB,EAAEJ,WAAW,CAAC,uBAAuB,GAAGD,OAAOK,kBAAkB;YAC/F,IAAIL,0BAAAA,OAAQM,MAAM,EAAEL,WAAW,CAAC,SAAS,GAAGD,OAAOM,MAAM;YACzD,IAAIN,CAAAA,0BAAAA,OAAQO,OAAO,MAAKC,WAAWP,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOO,OAAO;YACjF,IAAIP,0BAAAA,OAAQS,MAAM,EAAER,WAAW,CAAC,SAAS,GAAGD,OAAOS,MAAM;YACzD,IAAIT,0BAAAA,OAAQU,MAAM,EAAET,WAAW,CAAC,OAAO,GAAGD,OAAOW,SAAS,KAAK,SAAS,CAAC,CAAC,EAAEX,OAAOU,MAAM,CAAC,CAAC,GAAGV,OAAOU,MAAM;YAE3G,MAAME,WAAW,MAAMf,UAAUgB,GAAG,CAAU,UAAU;gBAAEb,QAAQC;YAAY;YAC9E,OAAOP,iBAAiBkB,UAAUjB;QACpC;QAEA,MAAMkB,KAAIC,QAAgB;YACxB,MAAMF,WAAW,MAAMf,UAAUgB,GAAG,CAAU,CAAC,OAAO,EAAEC,SAAS,CAAC;YAClE,OAAOtB,UAAUoB,UAAUjB;QAC7B;QAEA,MAAMoB,QAAOC,IAAuB;YAClC,MAAMJ,WAAW,MAAMf,UAAUoB,IAAI,CAAU,UAAU;gBACvDD,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,sBAAsBJ,KAAKX,kBAAkB;wBAC7CgB,MAAML,KAAKK,IAAI;wBACfC,MAAMN,KAAKM,IAAI;wBACfC,aAAaP,KAAKO,WAAW;wBAC7BC,OAAOR,KAAKQ,KAAK;wBACjBC,YAAYT,KAAKS,UAAU;wBAC3BC,SAASV,KAAKU,OAAO;oBACvB;gBACF;YACF;YACA,OAAOlC,UAAUoB,UAAUjB;QAC7B;QAEA,MAAMgC,QAAOb,QAAgB,EAAEE,IAAuB;YACpD,MAAMJ,WAAW,MAAMf,UAAU+B,GAAG,CAAU,CAAC,OAAO,EAAEd,SAAS,CAAC,EAAE;gBAClEE,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVG,MAAMN,KAAKM,IAAI;wBACfC,aAAaP,KAAKO,WAAW;wBAC7BC,OAAOR,KAAKQ,KAAK;wBACjBC,YAAYT,KAAKS,UAAU;wBAC3BlB,SAASS,KAAKT,OAAO;wBACrBD,QAAQU,KAAKV,MAAM;wBACnBoB,SAASV,KAAKU,OAAO;oBACvB;gBACF;YACF;YACA,OAAOlC,UAAUoB,UAAUjB;QAC7B;QAEA,MAAMkC,QAAOf,QAAgB;YAC3B,MAAMjB,UAAUgC,MAAM,CAAC,CAAC,OAAO,EAAEf,SAAS,CAAC;QAC7C;QAEA,MAAMgB,kBAAiBzB,kBAA0B;YAC/C,MAAMO,WAAW,MAAMf,UAAUgB,GAAG,CAAU,CAAC,aAAa,EAAER,mBAAmB,MAAM,CAAC;YACxF,OAAOZ,WAAWmB,UAAUjB;QAC9B;IACF;AACF"}
@@ -0,0 +1,6 @@
1
+ export * from './onboardings.service';
2
+ export * from './flows.service';
3
+ export * from './user-journeys.service';
4
+ export * from './user-identities.service';
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/services/index.ts"],"sourcesContent":["export * from './onboardings.service';\nexport * from './flows.service';\nexport * from './user-journeys.service';\nexport * from './user-identities.service';\n"],"names":[],"rangeMappings":";;;","mappings":"AAAA,cAAc,wBAAwB;AACtC,cAAc,kBAAkB;AAChC,cAAc,0BAA0B;AACxC,cAAc,4BAA4B"}
@@ -0,0 +1,59 @@
1
+ import { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';
2
+ import { onboardingMapper } from '../mappers/onboarding.mapper';
3
+ export function createOnboardingsService(transport, _config) {
4
+ return {
5
+ async list (params) {
6
+ const queryParams = {};
7
+ if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
8
+ if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
9
+ if (params == null ? void 0 : params.status) queryParams['status'] = params.status;
10
+ if ((params == null ? void 0 : params.enabled) !== undefined) queryParams['enabled'] = String(params.enabled);
11
+ if (params == null ? void 0 : params.search) queryParams['search'] = params.search;
12
+ if (params == null ? void 0 : params.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;
13
+ const response = await transport.get('/onboardings', {
14
+ params: queryParams
15
+ });
16
+ return decodePageResult(response, onboardingMapper);
17
+ },
18
+ async get (uniqueId) {
19
+ const response = await transport.get(`/onboardings/${uniqueId}`);
20
+ return decodeOne(response, onboardingMapper);
21
+ },
22
+ async create (data) {
23
+ const response = await transport.post('/onboardings', {
24
+ data: {
25
+ type: 'Onboarding',
26
+ attributes: {
27
+ code: data.code,
28
+ name: data.name,
29
+ description: data.description,
30
+ steps: data.steps,
31
+ payload: data.payload
32
+ }
33
+ }
34
+ });
35
+ return decodeOne(response, onboardingMapper);
36
+ },
37
+ async update (uniqueId, data) {
38
+ const response = await transport.put(`/onboardings/${uniqueId}`, {
39
+ data: {
40
+ type: 'Onboarding',
41
+ attributes: {
42
+ name: data.name,
43
+ description: data.description,
44
+ steps: data.steps,
45
+ enabled: data.enabled,
46
+ status: data.status,
47
+ payload: data.payload
48
+ }
49
+ }
50
+ });
51
+ return decodeOne(response, onboardingMapper);
52
+ },
53
+ async delete (uniqueId) {
54
+ await transport.delete(`/onboardings/${uniqueId}`);
55
+ }
56
+ };
57
+ }
58
+
59
+ //# sourceMappingURL=onboardings.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/services/onboardings.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n Onboarding,\n CreateOnboardingRequest,\n UpdateOnboardingRequest,\n ListOnboardingsParams,\n} from '../types/onboarding';\nimport { onboardingMapper } from '../mappers/onboarding.mapper';\n\nexport interface OnboardingsService {\n list(params?: ListOnboardingsParams): Promise<PageResult<Onboarding>>;\n get(uniqueId: string): Promise<Onboarding>;\n create(data: CreateOnboardingRequest): Promise<Onboarding>;\n update(uniqueId: string, data: UpdateOnboardingRequest): Promise<Onboarding>;\n delete(uniqueId: string): Promise<void>;\n}\n\nexport function createOnboardingsService(transport: Transport, _config: { appId: string }): OnboardingsService {\n return {\n async list(params?: ListOnboardingsParams): Promise<PageResult<Onboarding>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.status) queryParams['status'] = params.status;\n if (params?.enabled !== undefined) queryParams['enabled'] = String(params.enabled);\n if (params?.search) queryParams['search'] = params.search;\n if (params?.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;\n\n const response = await transport.get<unknown>('/onboardings', { params: queryParams });\n return decodePageResult(response, onboardingMapper);\n },\n\n async get(uniqueId: string): Promise<Onboarding> {\n const response = await transport.get<unknown>(`/onboardings/${uniqueId}`);\n return decodeOne(response, onboardingMapper);\n },\n\n async create(data: CreateOnboardingRequest): Promise<Onboarding> {\n const response = await transport.post<unknown>('/onboardings', {\n data: {\n type: 'Onboarding',\n attributes: {\n code: data.code,\n name: data.name,\n description: data.description,\n steps: data.steps,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, onboardingMapper);\n },\n\n async update(uniqueId: string, data: UpdateOnboardingRequest): Promise<Onboarding> {\n const response = await transport.put<unknown>(`/onboardings/${uniqueId}`, {\n data: {\n type: 'Onboarding',\n attributes: {\n name: data.name,\n description: data.description,\n steps: data.steps,\n enabled: data.enabled,\n status: data.status,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, onboardingMapper);\n },\n\n async delete(uniqueId: string): Promise<void> {\n await transport.delete(`/onboardings/${uniqueId}`);\n },\n };\n}\n"],"names":["decodeOne","decodePageResult","onboardingMapper","createOnboardingsService","transport","_config","list","params","queryParams","page","String","perPage","status","enabled","undefined","search","sortBy","sortOrder","response","get","uniqueId","create","data","post","type","attributes","code","name","description","steps","payload","update","put","delete"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,SAAS,EAAEC,gBAAgB,QAAQ,0BAA0B;AAOtE,SAASC,gBAAgB,QAAQ,+BAA+B;AAUhE,OAAO,SAASC,yBAAyBC,SAAoB,EAAEC,OAA0B;IACvF,OAAO;QACL,MAAMC,MAAKC,MAA8B;YACvC,MAAMC,cAAsC,CAAC;YAC7C,IAAID,0BAAAA,OAAQE,IAAI,EAAED,WAAW,CAAC,OAAO,GAAGE,OAAOH,OAAOE,IAAI;YAC1D,IAAIF,0BAAAA,OAAQI,OAAO,EAAEH,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOI,OAAO;YACnE,IAAIJ,0BAAAA,OAAQK,MAAM,EAAEJ,WAAW,CAAC,SAAS,GAAGD,OAAOK,MAAM;YACzD,IAAIL,CAAAA,0BAAAA,OAAQM,OAAO,MAAKC,WAAWN,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOM,OAAO;YACjF,IAAIN,0BAAAA,OAAQQ,MAAM,EAAEP,WAAW,CAAC,SAAS,GAAGD,OAAOQ,MAAM;YACzD,IAAIR,0BAAAA,OAAQS,MAAM,EAAER,WAAW,CAAC,OAAO,GAAGD,OAAOU,SAAS,KAAK,SAAS,CAAC,CAAC,EAAEV,OAAOS,MAAM,CAAC,CAAC,GAAGT,OAAOS,MAAM;YAE3G,MAAME,WAAW,MAAMd,UAAUe,GAAG,CAAU,gBAAgB;gBAAEZ,QAAQC;YAAY;YACpF,OAAOP,iBAAiBiB,UAAUhB;QACpC;QAEA,MAAMiB,KAAIC,QAAgB;YACxB,MAAMF,WAAW,MAAMd,UAAUe,GAAG,CAAU,CAAC,aAAa,EAAEC,SAAS,CAAC;YACxE,OAAOpB,UAAUkB,UAAUhB;QAC7B;QAEA,MAAMmB,QAAOC,IAA6B;YACxC,MAAMJ,WAAW,MAAMd,UAAUmB,IAAI,CAAU,gBAAgB;gBAC7DD,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,MAAMJ,KAAKI,IAAI;wBACfC,MAAML,KAAKK,IAAI;wBACfC,aAAaN,KAAKM,WAAW;wBAC7BC,OAAOP,KAAKO,KAAK;wBACjBC,SAASR,KAAKQ,OAAO;oBACvB;gBACF;YACF;YACA,OAAO9B,UAAUkB,UAAUhB;QAC7B;QAEA,MAAM6B,QAAOX,QAAgB,EAAEE,IAA6B;YAC1D,MAAMJ,WAAW,MAAMd,UAAU4B,GAAG,CAAU,CAAC,aAAa,EAAEZ,SAAS,CAAC,EAAE;gBACxEE,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVE,MAAML,KAAKK,IAAI;wBACfC,aAAaN,KAAKM,WAAW;wBAC7BC,OAAOP,KAAKO,KAAK;wBACjBhB,SAASS,KAAKT,OAAO;wBACrBD,QAAQU,KAAKV,MAAM;wBACnBkB,SAASR,KAAKQ,OAAO;oBACvB;gBACF;YACF;YACA,OAAO9B,UAAUkB,UAAUhB;QAC7B;QAEA,MAAM+B,QAAOb,QAAgB;YAC3B,MAAMhB,UAAU6B,MAAM,CAAC,CAAC,aAAa,EAAEb,SAAS,CAAC;QACnD;IACF;AACF"}
@@ -0,0 +1,59 @@
1
+ import { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';
2
+ import { userIdentityMapper } from '../mappers/user-identity.mapper';
3
+ export function createUserIdentitiesService(transport, _config) {
4
+ return {
5
+ async list (params) {
6
+ const queryParams = {};
7
+ if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
8
+ if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
9
+ if (params == null ? void 0 : params.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;
10
+ if (params == null ? void 0 : params.identityType) queryParams['identity_type'] = params.identityType;
11
+ if ((params == null ? void 0 : params.verified) !== undefined) queryParams['verified'] = String(params.verified);
12
+ if (params == null ? void 0 : params.status) queryParams['status'] = params.status;
13
+ if (params == null ? void 0 : params.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;
14
+ const response = await transport.get('/user_identities', {
15
+ params: queryParams
16
+ });
17
+ return decodePageResult(response, userIdentityMapper);
18
+ },
19
+ async get (uniqueId) {
20
+ const response = await transport.get(`/user_identities/${uniqueId}`);
21
+ return decodeOne(response, userIdentityMapper);
22
+ },
23
+ async create (data) {
24
+ const response = await transport.post('/user_identities', {
25
+ data: {
26
+ type: 'UserIdentity',
27
+ attributes: {
28
+ user_unique_id: data.userUniqueId,
29
+ identity_type: data.identityType,
30
+ identity_value: data.identityValue,
31
+ payload: data.payload
32
+ }
33
+ }
34
+ });
35
+ return decodeOne(response, userIdentityMapper);
36
+ },
37
+ async verify (uniqueId, data) {
38
+ const response = await transport.post(`/user_identities/${uniqueId}/verify`, {
39
+ data: {
40
+ type: 'UserIdentity',
41
+ attributes: {
42
+ verification_code: data.verificationCode,
43
+ verification_data: data.verificationData
44
+ }
45
+ }
46
+ });
47
+ return decodeOne(response, userIdentityMapper);
48
+ },
49
+ async delete (uniqueId) {
50
+ await transport.delete(`/user_identities/${uniqueId}`);
51
+ },
52
+ async listByUser (userUniqueId) {
53
+ const response = await transport.get(`/users/${userUniqueId}/identities`);
54
+ return decodeMany(response, userIdentityMapper);
55
+ }
56
+ };
57
+ }
58
+
59
+ //# sourceMappingURL=user-identities.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/services/user-identities.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n UserIdentity,\n CreateUserIdentityRequest,\n VerifyUserIdentityRequest,\n ListUserIdentitiesParams,\n} from '../types/user-identity';\nimport { userIdentityMapper } from '../mappers/user-identity.mapper';\n\nexport interface UserIdentitiesService {\n list(params?: ListUserIdentitiesParams): Promise<PageResult<UserIdentity>>;\n get(uniqueId: string): Promise<UserIdentity>;\n create(data: CreateUserIdentityRequest): Promise<UserIdentity>;\n verify(uniqueId: string, data: VerifyUserIdentityRequest): Promise<UserIdentity>;\n delete(uniqueId: string): Promise<void>;\n listByUser(userUniqueId: string): Promise<UserIdentity[]>;\n}\n\nexport function createUserIdentitiesService(transport: Transport, _config: { appId: string }): UserIdentitiesService {\n return {\n async list(params?: ListUserIdentitiesParams): Promise<PageResult<UserIdentity>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;\n if (params?.identityType) queryParams['identity_type'] = params.identityType;\n if (params?.verified !== undefined) queryParams['verified'] = String(params.verified);\n if (params?.status) queryParams['status'] = params.status;\n if (params?.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;\n\n const response = await transport.get<unknown>('/user_identities', { params: queryParams });\n return decodePageResult(response, userIdentityMapper);\n },\n\n async get(uniqueId: string): Promise<UserIdentity> {\n const response = await transport.get<unknown>(`/user_identities/${uniqueId}`);\n return decodeOne(response, userIdentityMapper);\n },\n\n async create(data: CreateUserIdentityRequest): Promise<UserIdentity> {\n const response = await transport.post<unknown>('/user_identities', {\n data: {\n type: 'UserIdentity',\n attributes: {\n user_unique_id: data.userUniqueId,\n identity_type: data.identityType,\n identity_value: data.identityValue,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, userIdentityMapper);\n },\n\n async verify(uniqueId: string, data: VerifyUserIdentityRequest): Promise<UserIdentity> {\n const response = await transport.post<unknown>(`/user_identities/${uniqueId}/verify`, {\n data: {\n type: 'UserIdentity',\n attributes: {\n verification_code: data.verificationCode,\n verification_data: data.verificationData,\n },\n },\n });\n return decodeOne(response, userIdentityMapper);\n },\n\n async delete(uniqueId: string): Promise<void> {\n await transport.delete(`/user_identities/${uniqueId}`);\n },\n\n async listByUser(userUniqueId: string): Promise<UserIdentity[]> {\n const response = await transport.get<unknown>(`/users/${userUniqueId}/identities`);\n return decodeMany(response, userIdentityMapper);\n },\n };\n}\n"],"names":["decodeOne","decodeMany","decodePageResult","userIdentityMapper","createUserIdentitiesService","transport","_config","list","params","queryParams","page","String","perPage","userUniqueId","identityType","verified","undefined","status","sortBy","sortOrder","response","get","uniqueId","create","data","post","type","attributes","user_unique_id","identity_type","identity_value","identityValue","payload","verify","verification_code","verificationCode","verification_data","verificationData","delete","listByUser"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,SAAS,EAAEC,UAAU,EAAEC,gBAAgB,QAAQ,0BAA0B;AAOlF,SAASC,kBAAkB,QAAQ,kCAAkC;AAWrE,OAAO,SAASC,4BAA4BC,SAAoB,EAAEC,OAA0B;IAC1F,OAAO;QACL,MAAMC,MAAKC,MAAiC;YAC1C,MAAMC,cAAsC,CAAC;YAC7C,IAAID,0BAAAA,OAAQE,IAAI,EAAED,WAAW,CAAC,OAAO,GAAGE,OAAOH,OAAOE,IAAI;YAC1D,IAAIF,0BAAAA,OAAQI,OAAO,EAAEH,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOI,OAAO;YACnE,IAAIJ,0BAAAA,OAAQK,YAAY,EAAEJ,WAAW,CAAC,iBAAiB,GAAGD,OAAOK,YAAY;YAC7E,IAAIL,0BAAAA,OAAQM,YAAY,EAAEL,WAAW,CAAC,gBAAgB,GAAGD,OAAOM,YAAY;YAC5E,IAAIN,CAAAA,0BAAAA,OAAQO,QAAQ,MAAKC,WAAWP,WAAW,CAAC,WAAW,GAAGE,OAAOH,OAAOO,QAAQ;YACpF,IAAIP,0BAAAA,OAAQS,MAAM,EAAER,WAAW,CAAC,SAAS,GAAGD,OAAOS,MAAM;YACzD,IAAIT,0BAAAA,OAAQU,MAAM,EAAET,WAAW,CAAC,OAAO,GAAGD,OAAOW,SAAS,KAAK,SAAS,CAAC,CAAC,EAAEX,OAAOU,MAAM,CAAC,CAAC,GAAGV,OAAOU,MAAM;YAE3G,MAAME,WAAW,MAAMf,UAAUgB,GAAG,CAAU,oBAAoB;gBAAEb,QAAQC;YAAY;YACxF,OAAOP,iBAAiBkB,UAAUjB;QACpC;QAEA,MAAMkB,KAAIC,QAAgB;YACxB,MAAMF,WAAW,MAAMf,UAAUgB,GAAG,CAAU,CAAC,iBAAiB,EAAEC,SAAS,CAAC;YAC5E,OAAOtB,UAAUoB,UAAUjB;QAC7B;QAEA,MAAMoB,QAAOC,IAA+B;YAC1C,MAAMJ,WAAW,MAAMf,UAAUoB,IAAI,CAAU,oBAAoB;gBACjED,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,gBAAgBJ,KAAKX,YAAY;wBACjCgB,eAAeL,KAAKV,YAAY;wBAChCgB,gBAAgBN,KAAKO,aAAa;wBAClCC,SAASR,KAAKQ,OAAO;oBACvB;gBACF;YACF;YACA,OAAOhC,UAAUoB,UAAUjB;QAC7B;QAEA,MAAM8B,QAAOX,QAAgB,EAAEE,IAA+B;YAC5D,MAAMJ,WAAW,MAAMf,UAAUoB,IAAI,CAAU,CAAC,iBAAiB,EAAEH,SAAS,OAAO,CAAC,EAAE;gBACpFE,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVO,mBAAmBV,KAAKW,gBAAgB;wBACxCC,mBAAmBZ,KAAKa,gBAAgB;oBAC1C;gBACF;YACF;YACA,OAAOrC,UAAUoB,UAAUjB;QAC7B;QAEA,MAAMmC,QAAOhB,QAAgB;YAC3B,MAAMjB,UAAUiC,MAAM,CAAC,CAAC,iBAAiB,EAAEhB,SAAS,CAAC;QACvD;QAEA,MAAMiB,YAAW1B,YAAoB;YACnC,MAAMO,WAAW,MAAMf,UAAUgB,GAAG,CAAU,CAAC,OAAO,EAAER,aAAa,WAAW,CAAC;YACjF,OAAOZ,WAAWmB,UAAUjB;QAC9B;IACF;AACF"}
@@ -0,0 +1,74 @@
1
+ import { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';
2
+ import { userJourneyMapper } from '../mappers/user-journey.mapper';
3
+ export function createUserJourneysService(transport, _config) {
4
+ return {
5
+ async list (params) {
6
+ const queryParams = {};
7
+ if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
8
+ if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
9
+ if (params == null ? void 0 : params.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;
10
+ if (params == null ? void 0 : params.onboardingUniqueId) queryParams['onboarding_unique_id'] = params.onboardingUniqueId;
11
+ if (params == null ? void 0 : params.flowUniqueId) queryParams['flow_unique_id'] = params.flowUniqueId;
12
+ if (params == null ? void 0 : params.status) queryParams['status'] = params.status;
13
+ if (params == null ? void 0 : params.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;
14
+ const response = await transport.get('/user_journeys', {
15
+ params: queryParams
16
+ });
17
+ return decodePageResult(response, userJourneyMapper);
18
+ },
19
+ async get (uniqueId) {
20
+ const response = await transport.get(`/user_journeys/${uniqueId}`);
21
+ return decodeOne(response, userJourneyMapper);
22
+ },
23
+ async start (data) {
24
+ const response = await transport.post('/user_journeys', {
25
+ data: {
26
+ type: 'UserJourney',
27
+ attributes: {
28
+ user_unique_id: data.userUniqueId,
29
+ onboarding_unique_id: data.onboardingUniqueId,
30
+ flow_unique_id: data.flowUniqueId,
31
+ payload: data.payload
32
+ }
33
+ }
34
+ });
35
+ return decodeOne(response, userJourneyMapper);
36
+ },
37
+ async completeStep (uniqueId, data) {
38
+ const response = await transport.post(`/user_journeys/${uniqueId}/complete_step`, {
39
+ data: {
40
+ type: 'UserJourney',
41
+ attributes: {
42
+ step_number: data.stepNumber,
43
+ step_data: data.stepData
44
+ }
45
+ }
46
+ });
47
+ return decodeOne(response, userJourneyMapper);
48
+ },
49
+ async abandon (uniqueId) {
50
+ const response = await transport.put(`/user_journeys/${uniqueId}/abandon`, {
51
+ data: {
52
+ type: 'UserJourney',
53
+ attributes: {}
54
+ }
55
+ });
56
+ return decodeOne(response, userJourneyMapper);
57
+ },
58
+ async getByUser (userUniqueId) {
59
+ const response = await transport.get(`/users/${userUniqueId}/journeys`);
60
+ return decodeMany(response, userJourneyMapper);
61
+ },
62
+ async getProgress (uniqueId) {
63
+ const response = await transport.get(`/user_journeys/${uniqueId}/progress`);
64
+ const data = response;
65
+ return {
66
+ progress: data.data.attributes.progress || 0,
67
+ currentStep: data.data.attributes.current_step,
68
+ completedSteps: data.data.attributes.completed_steps
69
+ };
70
+ }
71
+ };
72
+ }
73
+
74
+ //# sourceMappingURL=user-journeys.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/services/user-journeys.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n UserJourney,\n StartJourneyRequest,\n CompleteStepRequest,\n ListUserJourneysParams,\n} from '../types/user-journey';\nimport { userJourneyMapper } from '../mappers/user-journey.mapper';\n\nexport interface UserJourneysService {\n list(params?: ListUserJourneysParams): Promise<PageResult<UserJourney>>;\n get(uniqueId: string): Promise<UserJourney>;\n start(data: StartJourneyRequest): Promise<UserJourney>;\n completeStep(uniqueId: string, data: CompleteStepRequest): Promise<UserJourney>;\n abandon(uniqueId: string): Promise<UserJourney>;\n getByUser(userUniqueId: string): Promise<UserJourney[]>;\n getProgress(uniqueId: string): Promise<{ progress: number; currentStep?: number; completedSteps?: number[] }>;\n}\n\nexport function createUserJourneysService(transport: Transport, _config: { appId: string }): UserJourneysService {\n return {\n async list(params?: ListUserJourneysParams): Promise<PageResult<UserJourney>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;\n if (params?.onboardingUniqueId) queryParams['onboarding_unique_id'] = params.onboardingUniqueId;\n if (params?.flowUniqueId) queryParams['flow_unique_id'] = params.flowUniqueId;\n if (params?.status) queryParams['status'] = params.status;\n if (params?.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;\n\n const response = await transport.get<unknown>('/user_journeys', { params: queryParams });\n return decodePageResult(response, userJourneyMapper);\n },\n\n async get(uniqueId: string): Promise<UserJourney> {\n const response = await transport.get<unknown>(`/user_journeys/${uniqueId}`);\n return decodeOne(response, userJourneyMapper);\n },\n\n async start(data: StartJourneyRequest): Promise<UserJourney> {\n const response = await transport.post<unknown>('/user_journeys', {\n data: {\n type: 'UserJourney',\n attributes: {\n user_unique_id: data.userUniqueId,\n onboarding_unique_id: data.onboardingUniqueId,\n flow_unique_id: data.flowUniqueId,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, userJourneyMapper);\n },\n\n async completeStep(uniqueId: string, data: CompleteStepRequest): Promise<UserJourney> {\n const response = await transport.post<unknown>(`/user_journeys/${uniqueId}/complete_step`, {\n data: {\n type: 'UserJourney',\n attributes: {\n step_number: data.stepNumber,\n step_data: data.stepData,\n },\n },\n });\n return decodeOne(response, userJourneyMapper);\n },\n\n async abandon(uniqueId: string): Promise<UserJourney> {\n const response = await transport.put<unknown>(`/user_journeys/${uniqueId}/abandon`, {\n data: {\n type: 'UserJourney',\n attributes: {},\n },\n });\n return decodeOne(response, userJourneyMapper);\n },\n\n async getByUser(userUniqueId: string): Promise<UserJourney[]> {\n const response = await transport.get<unknown>(`/users/${userUniqueId}/journeys`);\n return decodeMany(response, userJourneyMapper);\n },\n\n async getProgress(uniqueId: string): Promise<{ progress: number; currentStep?: number; completedSteps?: number[] }> {\n const response = await transport.get<unknown>(`/user_journeys/${uniqueId}/progress`);\n const data = response as { data: { attributes: { progress: number; current_step?: number; completed_steps?: number[] } } };\n return {\n progress: data.data.attributes.progress || 0,\n currentStep: data.data.attributes.current_step,\n completedSteps: data.data.attributes.completed_steps,\n };\n },\n };\n}\n"],"names":["decodeOne","decodeMany","decodePageResult","userJourneyMapper","createUserJourneysService","transport","_config","list","params","queryParams","page","String","perPage","userUniqueId","onboardingUniqueId","flowUniqueId","status","sortBy","sortOrder","response","get","uniqueId","start","data","post","type","attributes","user_unique_id","onboarding_unique_id","flow_unique_id","payload","completeStep","step_number","stepNumber","step_data","stepData","abandon","put","getByUser","getProgress","progress","currentStep","current_step","completedSteps","completed_steps"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,SAAS,EAAEC,UAAU,EAAEC,gBAAgB,QAAQ,0BAA0B;AAOlF,SAASC,iBAAiB,QAAQ,iCAAiC;AAYnE,OAAO,SAASC,0BAA0BC,SAAoB,EAAEC,OAA0B;IACxF,OAAO;QACL,MAAMC,MAAKC,MAA+B;YACxC,MAAMC,cAAsC,CAAC;YAC7C,IAAID,0BAAAA,OAAQE,IAAI,EAAED,WAAW,CAAC,OAAO,GAAGE,OAAOH,OAAOE,IAAI;YAC1D,IAAIF,0BAAAA,OAAQI,OAAO,EAAEH,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOI,OAAO;YACnE,IAAIJ,0BAAAA,OAAQK,YAAY,EAAEJ,WAAW,CAAC,iBAAiB,GAAGD,OAAOK,YAAY;YAC7E,IAAIL,0BAAAA,OAAQM,kBAAkB,EAAEL,WAAW,CAAC,uBAAuB,GAAGD,OAAOM,kBAAkB;YAC/F,IAAIN,0BAAAA,OAAQO,YAAY,EAAEN,WAAW,CAAC,iBAAiB,GAAGD,OAAOO,YAAY;YAC7E,IAAIP,0BAAAA,OAAQQ,MAAM,EAAEP,WAAW,CAAC,SAAS,GAAGD,OAAOQ,MAAM;YACzD,IAAIR,0BAAAA,OAAQS,MAAM,EAAER,WAAW,CAAC,OAAO,GAAGD,OAAOU,SAAS,KAAK,SAAS,CAAC,CAAC,EAAEV,OAAOS,MAAM,CAAC,CAAC,GAAGT,OAAOS,MAAM;YAE3G,MAAME,WAAW,MAAMd,UAAUe,GAAG,CAAU,kBAAkB;gBAAEZ,QAAQC;YAAY;YACtF,OAAOP,iBAAiBiB,UAAUhB;QACpC;QAEA,MAAMiB,KAAIC,QAAgB;YACxB,MAAMF,WAAW,MAAMd,UAAUe,GAAG,CAAU,CAAC,eAAe,EAAEC,SAAS,CAAC;YAC1E,OAAOrB,UAAUmB,UAAUhB;QAC7B;QAEA,MAAMmB,OAAMC,IAAyB;YACnC,MAAMJ,WAAW,MAAMd,UAAUmB,IAAI,CAAU,kBAAkB;gBAC/DD,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,gBAAgBJ,KAAKV,YAAY;wBACjCe,sBAAsBL,KAAKT,kBAAkB;wBAC7Ce,gBAAgBN,KAAKR,YAAY;wBACjCe,SAASP,KAAKO,OAAO;oBACvB;gBACF;YACF;YACA,OAAO9B,UAAUmB,UAAUhB;QAC7B;QAEA,MAAM4B,cAAaV,QAAgB,EAAEE,IAAyB;YAC5D,MAAMJ,WAAW,MAAMd,UAAUmB,IAAI,CAAU,CAAC,eAAe,EAAEH,SAAS,cAAc,CAAC,EAAE;gBACzFE,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVM,aAAaT,KAAKU,UAAU;wBAC5BC,WAAWX,KAAKY,QAAQ;oBAC1B;gBACF;YACF;YACA,OAAOnC,UAAUmB,UAAUhB;QAC7B;QAEA,MAAMiC,SAAQf,QAAgB;YAC5B,MAAMF,WAAW,MAAMd,UAAUgC,GAAG,CAAU,CAAC,eAAe,EAAEhB,SAAS,QAAQ,CAAC,EAAE;gBAClFE,MAAM;oBACJE,MAAM;oBACNC,YAAY,CAAC;gBACf;YACF;YACA,OAAO1B,UAAUmB,UAAUhB;QAC7B;QAEA,MAAMmC,WAAUzB,YAAoB;YAClC,MAAMM,WAAW,MAAMd,UAAUe,GAAG,CAAU,CAAC,OAAO,EAAEP,aAAa,SAAS,CAAC;YAC/E,OAAOZ,WAAWkB,UAAUhB;QAC9B;QAEA,MAAMoC,aAAYlB,QAAgB;YAChC,MAAMF,WAAW,MAAMd,UAAUe,GAAG,CAAU,CAAC,eAAe,EAAEC,SAAS,SAAS,CAAC;YACnF,MAAME,OAAOJ;YACb,OAAO;gBACLqB,UAAUjB,KAAKA,IAAI,CAACG,UAAU,CAACc,QAAQ,IAAI;gBAC3CC,aAAalB,KAAKA,IAAI,CAACG,UAAU,CAACgB,YAAY;gBAC9CC,gBAAgBpB,KAAKA,IAAI,CAACG,UAAU,CAACkB,eAAe;YACtD;QACF;IACF;AACF"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/types/flow.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\nexport interface Flow extends IdentityCore {\n onboardingUniqueId: string;\n code: string;\n name: string;\n description?: string;\n steps?: Record<string, unknown>[];\n conditions?: Record<string, unknown>;\n status: EntityStatus;\n enabled: boolean;\n payload?: Record<string, unknown>;\n}\n\nexport interface CreateFlowRequest {\n onboardingUniqueId: string;\n code: string;\n name: string;\n description?: string;\n steps?: Record<string, unknown>[];\n conditions?: Record<string, unknown>;\n payload?: Record<string, unknown>;\n}\n\nexport interface UpdateFlowRequest {\n name?: string;\n description?: string;\n steps?: Record<string, unknown>[];\n conditions?: Record<string, unknown>;\n enabled?: boolean;\n status?: EntityStatus;\n payload?: Record<string, unknown>;\n}\n\nexport interface ListFlowsParams {\n page?: number;\n perPage?: number;\n onboardingUniqueId?: string;\n status?: EntityStatus;\n enabled?: boolean;\n search?: string;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n}\n"],"names":[],"rangeMappings":"","mappings":"AAkCA,WASC"}
@@ -0,0 +1,6 @@
1
+ export * from './onboarding';
2
+ export * from './flow';
3
+ export * from './user-journey';
4
+ export * from './user-identity';
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/types/index.ts"],"sourcesContent":["export * from './onboarding';\nexport * from './flow';\nexport * from './user-journey';\nexport * from './user-identity';\n"],"names":[],"rangeMappings":";;;","mappings":"AAAA,cAAc,eAAe;AAC7B,cAAc,SAAS;AACvB,cAAc,iBAAiB;AAC/B,cAAc,kBAAkB"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/types/onboarding.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\nexport interface Onboarding extends IdentityCore {\n code: string;\n name: string;\n description?: string;\n steps?: Record<string, unknown>[];\n status: EntityStatus;\n enabled: boolean;\n payload?: Record<string, unknown>;\n}\n\nexport interface CreateOnboardingRequest {\n code: string;\n name: string;\n description?: string;\n steps?: Record<string, unknown>[];\n payload?: Record<string, unknown>;\n}\n\nexport interface UpdateOnboardingRequest {\n name?: string;\n description?: string;\n steps?: Record<string, unknown>[];\n enabled?: boolean;\n status?: EntityStatus;\n payload?: Record<string, unknown>;\n}\n\nexport interface ListOnboardingsParams {\n page?: number;\n perPage?: number;\n status?: EntityStatus;\n enabled?: boolean;\n search?: string;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n}\n"],"names":[],"rangeMappings":"","mappings":"AA6BA,WAQC"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=user-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/types/user-identity.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\nexport interface UserIdentity extends IdentityCore {\n userUniqueId: string;\n identityType: string;\n identityValue: string;\n verified: boolean;\n verifiedAt?: Date;\n status: EntityStatus;\n enabled: boolean;\n payload?: Record<string, unknown>;\n}\n\nexport interface CreateUserIdentityRequest {\n userUniqueId: string;\n identityType: string;\n identityValue: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface VerifyUserIdentityRequest {\n verificationCode?: string;\n verificationData?: Record<string, unknown>;\n}\n\nexport interface ListUserIdentitiesParams {\n page?: number;\n perPage?: number;\n userUniqueId?: string;\n identityType?: string;\n verified?: boolean;\n status?: EntityStatus;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n}\n"],"names":[],"rangeMappings":"","mappings":"AAyBA,WASC"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=user-journey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/types/user-journey.ts"],"sourcesContent":["import type { IdentityCore } from '@23blocks/contracts';\n\nexport type UserJourneyStatus = 'active' | 'completed' | 'abandoned';\n\nexport interface UserJourney extends IdentityCore {\n userUniqueId: string;\n onboardingUniqueId: string;\n flowUniqueId?: string;\n currentStep?: number;\n completedSteps?: number[];\n progress?: number;\n startedAt: Date;\n completedAt?: Date;\n status: UserJourneyStatus;\n payload?: Record<string, unknown>;\n}\n\nexport interface StartJourneyRequest {\n userUniqueId: string;\n onboardingUniqueId: string;\n flowUniqueId?: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface CompleteStepRequest {\n stepNumber: number;\n stepData?: Record<string, unknown>;\n}\n\nexport interface ListUserJourneysParams {\n page?: number;\n perPage?: number;\n userUniqueId?: string;\n onboardingUniqueId?: string;\n flowUniqueId?: string;\n status?: UserJourneyStatus;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n}\n"],"names":[],"rangeMappings":"","mappings":"AA6BA,WASC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@23blocks/block-onboarding",
3
+ "version": "0.1.0",
4
+ "description": "Onboarding block for 23blocks SDK - user journeys, flows, and identity verification",
5
+ "license": "MIT",
6
+ "author": "23blocks <hello@23blocks.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/23blocks-OS/frontend-sdk.git",
10
+ "directory": "packages/block-onboarding"
11
+ },
12
+ "homepage": "https://github.com/23blocks-OS/frontend-sdk/tree/main/packages/block-onboarding",
13
+ "bugs": {
14
+ "url": "https://github.com/23blocks-OS/frontend-sdk/issues"
15
+ },
16
+ "keywords": [
17
+ "23blocks",
18
+ "sdk",
19
+ "onboarding",
20
+ "user-journey",
21
+ "flows",
22
+ "identity-verification"
23
+ ],
24
+ "type": "module",
25
+ "main": "./dist/index.js",
26
+ "module": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ "./package.json": "./package.json",
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/index.js",
33
+ "default": "./dist/index.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "!**/*.tsbuildinfo"
39
+ ],
40
+ "nx": {
41
+ "sourceRoot": "packages/block-onboarding/src",
42
+ "targets": {
43
+ "build": {
44
+ "executor": "@nx/js:swc",
45
+ "outputs": [
46
+ "{options.outputPath}"
47
+ ],
48
+ "options": {
49
+ "outputPath": "packages/block-onboarding/dist",
50
+ "main": "packages/block-onboarding/src/index.ts",
51
+ "tsConfig": "packages/block-onboarding/tsconfig.lib.json",
52
+ "skipTypeCheck": true,
53
+ "stripLeadingPaths": true
54
+ }
55
+ }
56
+ }
57
+ },
58
+ "dependencies": {
59
+ "@23blocks/contracts": "*",
60
+ "@23blocks/jsonapi-codec": "*",
61
+ "@swc/helpers": "~0.5.11"
62
+ }
63
+ }