@unchainedshop/core-warehousing 4.3.4 → 4.4.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/README.md CHANGED
@@ -1,3 +1,94 @@
1
- # Warehousing (Unchained Engine)
1
+ [![npm version](https://img.shields.io/npm/v/@unchainedshop/core-warehousing.svg)](https://npmjs.com/package/@unchainedshop/core-warehousing)
2
+ [![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](https://opensource.org/licenses/EUPL-1.2)
2
3
 
3
- This package contains business logic and database abstraction for warehousing in Unchained.
4
+ # @unchainedshop/core-warehousing
5
+
6
+ Warehousing provider module for the Unchained Engine. Manages inventory, stock levels, and tokenized product surrogates.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @unchainedshop/core-warehousing
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ```typescript
17
+ import { configureWarehousingModule, WarehousingProviderType } from '@unchainedshop/core-warehousing';
18
+
19
+ const warehousingModule = await configureWarehousingModule({ db });
20
+
21
+ // Create a warehousing provider
22
+ const providerId = await warehousingModule.create({
23
+ type: WarehousingProviderType.PHYSICAL,
24
+ adapterKey: 'shop.unchained.warehousing.inventory',
25
+ });
26
+
27
+ // Find providers
28
+ const providers = await warehousingModule.findProviders({});
29
+ ```
30
+
31
+ ## API Overview
32
+
33
+ ### Module Configuration
34
+
35
+ | Export | Description |
36
+ |--------|-------------|
37
+ | `configureWarehousingModule` | Configure and return the warehousing module |
38
+
39
+ ### Queries
40
+
41
+ | Method | Description |
42
+ |--------|-------------|
43
+ | `findProvider` | Find provider by ID |
44
+ | `findProviders` | Find providers with filtering |
45
+ | `count` | Count providers |
46
+ | `providerExists` | Check if provider exists |
47
+ | `findSupported` | Find providers for product context |
48
+ | `findInterface` | Get provider interface definition |
49
+
50
+ ### Mutations
51
+
52
+ | Method | Description |
53
+ |--------|-------------|
54
+ | `create` | Create a new warehousing provider |
55
+ | `update` | Update provider configuration |
56
+ | `delete` | Soft delete a provider |
57
+
58
+ ### Token Surrogates
59
+
60
+ For tokenized products (NFTs):
61
+
62
+ | Method | Description |
63
+ |--------|-------------|
64
+ | `findTokenSurrogate` | Find token surrogate |
65
+ | `createTokenSurrogate` | Create token surrogate |
66
+ | `updateTokenSurrogate` | Update token surrogate |
67
+ | `deleteTokenSurrogate` | Delete token surrogate |
68
+ | `invalidateTokenSurrogates` | Invalidate surrogates for product |
69
+
70
+ ### Constants
71
+
72
+ | Export | Description |
73
+ |--------|-------------|
74
+ | `WarehousingProviderType` | Provider types (PHYSICAL, VIRTUAL) |
75
+
76
+ ### Types
77
+
78
+ | Export | Description |
79
+ |--------|-------------|
80
+ | `WarehousingProvider` | Provider document type |
81
+ | `TokenSurrogate` | Token surrogate document type |
82
+ | `WarehousingModule` | Module interface type |
83
+
84
+ ## Events
85
+
86
+ | Event | Description |
87
+ |-------|-------------|
88
+ | `WAREHOUSING_PROVIDER_CREATE` | Provider created |
89
+ | `WAREHOUSING_PROVIDER_UPDATE` | Provider updated |
90
+ | `WAREHOUSING_PROVIDER_REMOVE` | Provider deleted |
91
+
92
+ ## License
93
+
94
+ EUPL-1.2
@@ -1,4 +1,4 @@
1
- import { mongodb } from '@unchainedshop/mongodb';
1
+ import { type mongodb } from '@unchainedshop/mongodb';
2
2
  export interface TokenSurrogate {
3
3
  _id: string;
4
4
  userId?: string;
@@ -13,10 +13,10 @@ export interface TokenSurrogate {
13
13
  orderPositionId: string;
14
14
  meta: any;
15
15
  }
16
- export declare enum TokenStatus {
17
- CENTRALIZED = "CENTRALIZED",
18
- EXPORTING = "EXPORTING",
19
- DECENTRALIZED = "DECENTRALIZED"
20
- }
16
+ export declare const TokenStatus: {
17
+ readonly CENTRALIZED: "CENTRALIZED";
18
+ readonly EXPORTING: "EXPORTING";
19
+ readonly DECENTRALIZED: "DECENTRALIZED";
20
+ };
21
+ export type TokenStatus = (typeof TokenStatus)[keyof typeof TokenStatus];
21
22
  export declare const TokenSurrogateCollection: (db: mongodb.Db) => Promise<mongodb.Collection<TokenSurrogate>>;
22
- //# sourceMappingURL=TokenSurrogateCollection.d.ts.map
@@ -1,10 +1,9 @@
1
1
  import { buildDbIndexes, isDocumentDBCompatModeEnabled } from '@unchainedshop/mongodb';
2
- export var TokenStatus;
3
- (function (TokenStatus) {
4
- TokenStatus["CENTRALIZED"] = "CENTRALIZED";
5
- TokenStatus["EXPORTING"] = "EXPORTING";
6
- TokenStatus["DECENTRALIZED"] = "DECENTRALIZED";
7
- })(TokenStatus || (TokenStatus = {}));
2
+ export const TokenStatus = {
3
+ CENTRALIZED: 'CENTRALIZED',
4
+ EXPORTING: 'EXPORTING',
5
+ DECENTRALIZED: 'DECENTRALIZED',
6
+ };
8
7
  export const TokenSurrogateCollection = async (db) => {
9
8
  const TokenSurrogates = db.collection('token_surrogates');
10
9
  if (!isDocumentDBCompatModeEnabled()) {
@@ -57,4 +56,3 @@ export const TokenSurrogateCollection = async (db) => {
57
56
  ]);
58
57
  return TokenSurrogates;
59
58
  };
60
- //# sourceMappingURL=TokenSurrogateCollection.js.map
@@ -1,8 +1,9 @@
1
- import { mongodb, TimestampFields } from '@unchainedshop/mongodb';
2
- export declare enum WarehousingProviderType {
3
- PHYSICAL = "PHYSICAL",
4
- VIRTUAL = "VIRTUAL"
5
- }
1
+ import { type mongodb, type TimestampFields } from '@unchainedshop/mongodb';
2
+ export declare const WarehousingProviderType: {
3
+ readonly PHYSICAL: "PHYSICAL";
4
+ readonly VIRTUAL: "VIRTUAL";
5
+ };
6
+ export type WarehousingProviderType = (typeof WarehousingProviderType)[keyof typeof WarehousingProviderType];
6
7
  export type WarehousingConfiguration = {
7
8
  key: string;
8
9
  value: string;
@@ -14,4 +15,3 @@ export type WarehousingProvider = {
14
15
  configuration: WarehousingConfiguration;
15
16
  } & TimestampFields;
16
17
  export declare const WarehousingProvidersCollection: (db: mongodb.Db) => Promise<mongodb.Collection<WarehousingProvider>>;
17
- //# sourceMappingURL=WarehousingProvidersCollection.d.ts.map
@@ -1,9 +1,8 @@
1
1
  import { buildDbIndexes } from '@unchainedshop/mongodb';
2
- export var WarehousingProviderType;
3
- (function (WarehousingProviderType) {
4
- WarehousingProviderType["PHYSICAL"] = "PHYSICAL";
5
- WarehousingProviderType["VIRTUAL"] = "VIRTUAL";
6
- })(WarehousingProviderType || (WarehousingProviderType = {}));
2
+ export const WarehousingProviderType = {
3
+ PHYSICAL: 'PHYSICAL',
4
+ VIRTUAL: 'VIRTUAL',
5
+ };
7
6
  export const WarehousingProvidersCollection = async (db) => {
8
7
  const WarehousingProviders = db.collection('warehousing-providers');
9
8
  await buildDbIndexes(WarehousingProviders, [
@@ -25,4 +24,3 @@ export const WarehousingProvidersCollection = async (db) => {
25
24
  ]);
26
25
  return WarehousingProviders;
27
26
  };
28
- //# sourceMappingURL=WarehousingProvidersCollection.js.map
@@ -1,6 +1,6 @@
1
- import { mongodb, ModuleInput } from '@unchainedshop/mongodb';
2
- import { WarehousingProvider } from '../db/WarehousingProvidersCollection.js';
3
- import { TokenSurrogate } from '../db/TokenSurrogateCollection.js';
1
+ import { type mongodb, type ModuleInput } from '@unchainedshop/mongodb';
2
+ import { type WarehousingProvider } from '../db/WarehousingProvidersCollection.ts';
3
+ import { type TokenSurrogate } from '../db/TokenSurrogateCollection.ts';
4
4
  interface TokenQuery {
5
5
  queryString?: string;
6
6
  userId?: string;
@@ -8,11 +8,11 @@ interface TokenQuery {
8
8
  export declare const buildFindSelector: ({ includeDeleted, ...rest }?: mongodb.Filter<WarehousingProvider> & {
9
9
  includeDeleted?: boolean;
10
10
  }) => {
11
- type?: mongodb.Condition<import("../db/WarehousingProvidersCollection.js").WarehousingProviderType> | undefined;
11
+ type?: mongodb.Condition<import("../db/WarehousingProvidersCollection.ts").WarehousingProviderType> | undefined;
12
12
  created?: mongodb.Condition<Date> | undefined;
13
13
  deleted?: Date | mongodb.FilterOperators<Date | null | undefined> | null | undefined;
14
14
  adapterKey?: mongodb.Condition<string> | undefined;
15
- configuration?: mongodb.Condition<import("../db/WarehousingProvidersCollection.js").WarehousingConfiguration> | undefined;
15
+ configuration?: mongodb.Condition<import("../db/WarehousingProvidersCollection.ts").WarehousingConfiguration> | undefined;
16
16
  updated?: mongodb.Condition<Date | undefined>;
17
17
  _id?: mongodb.Condition<string> | undefined;
18
18
  $and?: mongodb.Filter<mongodb.WithId<WarehousingProvider>>[] | undefined;
@@ -66,4 +66,3 @@ export declare const configureWarehousingModule: ({ db }: ModuleInput<Record<str
66
66
  }>;
67
67
  export type WarehousingModule = Awaited<ReturnType<typeof configureWarehousingModule>>;
68
68
  export {};
69
- //# sourceMappingURL=configureWarehousingModule.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import { emit, registerEvents } from '@unchainedshop/events';
2
2
  import { generateDbFilterById, generateDbObjectId, assertDocumentDBCompatMode, } from '@unchainedshop/mongodb';
3
- import { WarehousingProvidersCollection, } from '../db/WarehousingProvidersCollection.js';
4
- import { TokenSurrogateCollection } from '../db/TokenSurrogateCollection.js';
3
+ import { WarehousingProvidersCollection, } from "../db/WarehousingProvidersCollection.js";
4
+ import { TokenSurrogateCollection } from "../db/TokenSurrogateCollection.js";
5
5
  import pMemoize from 'p-memoize';
6
6
  import ExpiryMap from 'expiry-map';
7
7
  const WAREHOUSING_PROVIDER_EVENTS = [
@@ -28,7 +28,6 @@ export const configureWarehousingModule = async ({ db }) => {
28
28
  const WarehousingProviders = await WarehousingProvidersCollection(db);
29
29
  const TokenSurrogates = await TokenSurrogateCollection(db);
30
30
  return {
31
- // Queries
32
31
  count: async (query) => {
33
32
  const providerCount = await WarehousingProviders.countDocuments(buildFindSelector(query));
34
33
  return providerCount;
@@ -133,7 +132,6 @@ export const configureWarehousingModule = async ({ db }) => {
133
132
  const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
134
133
  return hashHex;
135
134
  },
136
- // Mutations
137
135
  create: async (doc) => {
138
136
  const { insertedId: warehousingProviderId } = await WarehousingProviders.insertOne({
139
137
  _id: generateDbObjectId(),
@@ -174,4 +172,3 @@ export const configureWarehousingModule = async ({ db }) => {
174
172
  },
175
173
  };
176
174
  };
177
- //# sourceMappingURL=configureWarehousingModule.js.map
@@ -1,4 +1,3 @@
1
- export * from './module/configureWarehousingModule.js';
2
- export * from './db/TokenSurrogateCollection.js';
3
- export * from './db/WarehousingProvidersCollection.js';
4
- //# sourceMappingURL=warehousing-index.d.ts.map
1
+ export * from './module/configureWarehousingModule.ts';
2
+ export * from './db/TokenSurrogateCollection.ts';
3
+ export * from './db/WarehousingProvidersCollection.ts';
@@ -1,4 +1,3 @@
1
- export * from './module/configureWarehousingModule.js';
2
- export * from './db/TokenSurrogateCollection.js';
3
- export * from './db/WarehousingProvidersCollection.js';
4
- //# sourceMappingURL=warehousing-index.js.map
1
+ export * from "./module/configureWarehousingModule.js";
2
+ export * from "./db/TokenSurrogateCollection.js";
3
+ export * from "./db/WarehousingProvidersCollection.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-warehousing",
3
- "version": "4.3.4",
3
+ "version": "4.4.0",
4
4
  "main": "lib/warehousing-index.js",
5
5
  "types": "lib/warehousing-index.d.ts",
6
6
  "type": "module",
@@ -9,8 +9,8 @@
9
9
  "build": "tsc -b",
10
10
  "prepublishOnly": "npm run clean && npm run build",
11
11
  "watch": "tsc -w",
12
- "test": "tsx --test",
13
- "test:watch": "tsx --test --watch"
12
+ "test": "node --test",
13
+ "test:watch": "node --test --watch"
14
14
  },
15
15
  "repository": {
16
16
  "type": "git",
@@ -22,8 +22,10 @@
22
22
  "core"
23
23
  ],
24
24
  "authors": [
25
- "Joël Meiller",
26
- "Pascal Kaufmann"
25
+ "Pascal Kaufmann",
26
+ "Mikael Araya",
27
+ "Vedran Rudelj",
28
+ "Joël Meiller"
27
29
  ],
28
30
  "license": "EUPL-1.2",
29
31
  "bugs": {
@@ -31,15 +33,14 @@
31
33
  },
32
34
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
35
  "dependencies": {
34
- "@unchainedshop/events": "^4.3.0",
35
- "@unchainedshop/logger": "^4.3.0",
36
- "@unchainedshop/utils": "^4.3.0",
36
+ "@unchainedshop/events": "^4.4.0",
37
+ "@unchainedshop/logger": "^4.4.0",
38
+ "@unchainedshop/utils": "^4.4.0",
37
39
  "expiry-map": "^2.0.0",
38
40
  "p-memoize": "^8.0.0"
39
41
  },
40
42
  "devDependencies": {
41
- "@types/node": "^24.0.13",
42
- "tsx": "^4.20.3",
43
+ "@types/node": "^25.0.0",
43
44
  "typescript": "^5.8.3"
44
45
  }
45
46
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"TokenSurrogateCollection.d.ts","sourceRoot":"","sources":["../../src/db/TokenSurrogateCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiD,MAAM,wBAAwB,CAAC;AAEhG,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,GAAG,CAAC;CACX;AAED,oBAAY,WAAW;IACrB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,aAAa,kBAAkB;CAChC;AAED,eAAO,MAAM,wBAAwB,GAAU,IAAI,OAAO,CAAC,EAAE,gDA0D5D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TokenSurrogateCollection.js","sourceRoot":"","sources":["../../src/db/TokenSurrogateCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,cAAc,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAiBhG,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,0CAA2B,CAAA;IAC3B,sCAAuB,CAAA;IACvB,8CAA+B,CAAA;AACjC,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAAc,EAAE,EAAE;IAC/D,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAiB,kBAAkB,CAAC,CAAC;IAE1E,IAAI,CAAC,6BAA6B,EAAE,EAAE,CAAC;QACrC,MAAM,cAAc,CAClB,eAAe,EACf;YACE;gBACE,KAAK,EAAE;oBACL,iBAAiB,EAAE,MAAM;oBACzB,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,MAAM;oBACjB,GAAG,EAAE,MAAM;oBACX,aAAa,EAAE,MAAM;oBACrB,eAAe,EAAE,MAAM;iBACjB;gBACR,OAAO,EAAE;oBACP,OAAO,EAAE;wBACP,GAAG,EAAE,CAAC;wBACN,iBAAiB,EAAE,CAAC;wBACpB,MAAM,EAAE,CAAC;wBACT,SAAS,EAAE,CAAC;wBACZ,eAAe,EAAE,CAAC;wBAClB,aAAa,EAAE,CAAC;wBAChB,MAAM,EAAE,CAAC;qBACV;oBACD,IAAI,EAAE,uBAAuB;iBAC9B;aACF;SACF,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,CAAiB,eAAe,EAAE;QACpD;YACE,KAAK,EAAE;gBACL,iBAAiB,EAAE,CAAC;aACrB;SACF;QACD;YACE,KAAK,EAAE;gBACL,MAAM,EAAE,CAAC;aACV;SACF;QACD;YACE,KAAK,EAAE;gBACL,SAAS,EAAE,CAAC;aACb;SACF;QACD;YACE,KAAK,EAAE;gBACL,eAAe,EAAE,CAAC;aACnB;SACF;KACF,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WarehousingProvidersCollection.d.ts","sourceRoot":"","sources":["../../src/db/WarehousingProvidersCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAElF,oBAAY,uBAAuB;IACjC,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,wBAAwB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,wBAAwB,CAAC;CACzC,GAAG,eAAe,CAAC;AAEpB,eAAO,MAAM,8BAA8B,GAAU,IAAI,OAAO,CAAC,EAAE,qDAsBlE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WarehousingProvidersCollection.js","sourceRoot":"","sources":["../../src/db/WarehousingProvidersCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,cAAc,EAAmB,MAAM,wBAAwB,CAAC;AAElF,MAAM,CAAN,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IACjC,gDAAqB,CAAA;IACrB,8CAAmB,CAAA;AACrB,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,QAGlC;AAWD,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAE,EAAc,EAAE,EAAE;IACrE,MAAM,oBAAoB,GAAG,EAAE,CAAC,UAAU,CAAsB,uBAAuB,CAAC,CAAC;IAEzF,MAAM,cAAc,CAAsB,oBAAoB,EAAE;QAC9D;YACE,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC;aACR;SACF;QACD;YACE,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC;aACX;SACF;QACD;YACE,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC;aACX;SACF;KACF,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureWarehousingModule.d.ts","sourceRoot":"","sources":["../../src/module/configureWarehousingModule.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,OAAO,EACP,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EAEpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAA4B,MAAM,mCAAmC,CAAC;AAI7F,UAAU,UAAU;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAYD,eAAO,MAAM,iBAAiB,GAAI,8BAG/B,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;;;iBAkOumvS,CAAC;sBAAgC,CAAC;2BAAsC,CAAC;;;;CAhOzvvS,CAAC;AACF,eAAO,MAAM,sBAAsB,GAAI,0BAA0B,UAAU,mCAQ1E,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,QAAQ,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;mBAQlE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;2BAK7C,cAAc,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC;8CAKhC;QAAE,qBAAqB,EAAE,MAAM,CAAA;KAAE,YAClD,OAAO,CAAC,WAAW;6BAKA;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,YAAY,OAAO,CAAC,WAAW;2BAIpD,GAAG,YAAY,OAAO,CAAC,WAAW,KAAG,OAAO,CAAC,cAAc,EAAE,CAAC;6BAI7D,GAAG,KAAQ,OAAO,CAAC,MAAM,CAAC;gCAM9C;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,YAChD,OAAO,CAAC,WAAW,KAC5B,OAAO,CAAC,cAAc,EAAE,CAAC;2BAoBnB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,YAChE,OAAO,CAAC,WAAW,KAC3B,OAAO,CAAC,mBAAmB,EAAE,CAAC;;iDAgB9B;QACD,qBAAqB,EAAE,MAAM,CAAC;KAC/B,KAAG,OAAO,CAAC,OAAO,CAAC;mCAUd;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,GACD;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;KACvB;+BA4B0B,MAAM;sCAiBC,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;kBAmBhE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC;oCAgBzD,MAAM,OAAO,OAAO,CAAC,mBAAmB,CAAC;yBAiBpD,MAAM;EAgBpC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureWarehousingModule.js","sourceRoot":"","sources":["../../src/module/configureWarehousingModule.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"warehousing-index.d.ts","sourceRoot":"","sources":["../src/warehousing-index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"warehousing-index.js","sourceRoot":"","sources":["../src/warehousing-index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC"}
@@ -1,82 +0,0 @@
1
- import { mongodb, buildDbIndexes, isDocumentDBCompatModeEnabled } from '@unchainedshop/mongodb';
2
-
3
- export interface TokenSurrogate {
4
- _id: string;
5
- userId?: string;
6
- walletAddress?: string;
7
- invalidatedDate?: Date | null;
8
- expiryDate?: Date;
9
- quantity: number;
10
- contractAddress?: string;
11
- chainId?: string;
12
- tokenSerialNumber: string;
13
- productId: string;
14
- orderPositionId: string;
15
- meta: any;
16
- }
17
-
18
- export enum TokenStatus {
19
- CENTRALIZED = 'CENTRALIZED',
20
- EXPORTING = 'EXPORTING',
21
- DECENTRALIZED = 'DECENTRALIZED',
22
- }
23
-
24
- export const TokenSurrogateCollection = async (db: mongodb.Db) => {
25
- const TokenSurrogates = db.collection<TokenSurrogate>('token_surrogates');
26
-
27
- if (!isDocumentDBCompatModeEnabled()) {
28
- await buildDbIndexes<TokenSurrogate>(
29
- TokenSurrogates,
30
- [
31
- {
32
- index: {
33
- tokenSerialNumber: 'text',
34
- userId: 'text',
35
- productId: 'text',
36
- _id: 'text',
37
- walletAddress: 'text',
38
- contractAddress: 'text',
39
- } as any,
40
- options: {
41
- weights: {
42
- _id: 9,
43
- tokenSerialNumber: 8,
44
- userId: 3,
45
- productId: 6,
46
- contractAddress: 5,
47
- walletAddress: 4,
48
- status: 1,
49
- },
50
- name: 'token_fulltext_search',
51
- },
52
- },
53
- ],
54
- { rebuild: true },
55
- );
56
- }
57
-
58
- await buildDbIndexes<TokenSurrogate>(TokenSurrogates, [
59
- {
60
- index: {
61
- tokenSerialNumber: 1,
62
- },
63
- },
64
- {
65
- index: {
66
- userId: 1,
67
- },
68
- },
69
- {
70
- index: {
71
- productId: 1,
72
- },
73
- },
74
- {
75
- index: {
76
- orderPositionId: 1,
77
- },
78
- },
79
- ]);
80
-
81
- return TokenSurrogates;
82
- };
@@ -1,39 +0,0 @@
1
- import { mongodb, buildDbIndexes, TimestampFields } from '@unchainedshop/mongodb';
2
-
3
- export enum WarehousingProviderType {
4
- PHYSICAL = 'PHYSICAL',
5
- VIRTUAL = 'VIRTUAL',
6
- }
7
-
8
- export type WarehousingConfiguration = { key: string; value: string }[];
9
-
10
- export type WarehousingProvider = {
11
- _id: string;
12
- type: WarehousingProviderType;
13
- adapterKey: string;
14
- configuration: WarehousingConfiguration;
15
- } & TimestampFields;
16
-
17
- export const WarehousingProvidersCollection = async (db: mongodb.Db) => {
18
- const WarehousingProviders = db.collection<WarehousingProvider>('warehousing-providers');
19
-
20
- await buildDbIndexes<WarehousingProvider>(WarehousingProviders, [
21
- {
22
- index: {
23
- type: 1,
24
- },
25
- },
26
- {
27
- index: {
28
- created: 1,
29
- },
30
- },
31
- {
32
- index: {
33
- deleted: 1,
34
- },
35
- },
36
- ]);
37
-
38
- return WarehousingProviders;
39
- };
@@ -1,19 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert';
3
- import { WarehousingProviderType } from '../db/WarehousingProvidersCollection.js';
4
- import { buildFindSelector } from './configureWarehousingModule.js';
5
-
6
- describe('Warehousing', () => {
7
- describe('buildFindSelector', () => {
8
- it('Return correct filter object when passed no argument', () => {
9
- assert.deepStrictEqual(buildFindSelector({}), { deleted: null });
10
- });
11
-
12
- it('Return correct filter object when passed no argument', () => {
13
- assert.deepStrictEqual(buildFindSelector({ type: WarehousingProviderType.PHYSICAL }), {
14
- type: 'PHYSICAL',
15
- deleted: null,
16
- });
17
- });
18
- });
19
- });
@@ -1,260 +0,0 @@
1
- import { emit, registerEvents } from '@unchainedshop/events';
2
- import {
3
- generateDbFilterById,
4
- generateDbObjectId,
5
- mongodb,
6
- ModuleInput,
7
- assertDocumentDBCompatMode,
8
- } from '@unchainedshop/mongodb';
9
- import {
10
- WarehousingProvider,
11
- WarehousingProvidersCollection,
12
- } from '../db/WarehousingProvidersCollection.js';
13
- import { TokenSurrogate, TokenSurrogateCollection } from '../db/TokenSurrogateCollection.js';
14
- import pMemoize from 'p-memoize';
15
- import ExpiryMap from 'expiry-map';
16
-
17
- interface TokenQuery {
18
- queryString?: string;
19
- userId?: string;
20
- }
21
-
22
- const WAREHOUSING_PROVIDER_EVENTS: string[] = [
23
- 'WAREHOUSING_PROVIDER_CREATE',
24
- 'WAREHOUSING_PROVIDER_UPDATE',
25
- 'WAREHOUSING_PROVIDER_REMOVE',
26
- 'TOKEN_OWNERSHIP_CHANGED',
27
- 'TOKEN_INVALIDATED',
28
- ];
29
-
30
- const allProvidersCache = new ExpiryMap(process.env.NODE_ENV === 'production' ? 60000 : 1);
31
-
32
- export const buildFindSelector = ({
33
- includeDeleted = false,
34
- ...rest
35
- }: mongodb.Filter<WarehousingProvider> & { includeDeleted?: boolean } = {}) => {
36
- return { ...(includeDeleted ? {} : { deleted: null }), ...rest };
37
- };
38
- export const buildTokenFindSelector = ({ queryString, ...rest }: TokenQuery) => {
39
- const selector: mongodb.Filter<TokenSurrogate> = { ...(rest || {}) };
40
- if (queryString) {
41
- assertDocumentDBCompatMode();
42
- (selector as any).$text = { $search: queryString };
43
- }
44
-
45
- return selector;
46
- };
47
-
48
- export const configureWarehousingModule = async ({ db }: ModuleInput<Record<string, never>>) => {
49
- registerEvents(WAREHOUSING_PROVIDER_EVENTS);
50
-
51
- const WarehousingProviders = await WarehousingProvidersCollection(db);
52
- const TokenSurrogates = await TokenSurrogateCollection(db);
53
-
54
- return {
55
- // Queries
56
- count: async (query: mongodb.Filter<WarehousingProvider>): Promise<number> => {
57
- const providerCount = await WarehousingProviders.countDocuments(buildFindSelector(query));
58
- return providerCount;
59
- },
60
-
61
- createTokens: async (tokens: TokenSurrogate[]): Promise<void> => {
62
- await TokenSurrogates.insertMany(tokens);
63
- },
64
-
65
- findProvider: async (
66
- { warehousingProviderId }: { warehousingProviderId: string },
67
- options?: mongodb.FindOptions,
68
- ) => {
69
- return WarehousingProviders.findOne(generateDbFilterById(warehousingProviderId), options);
70
- },
71
-
72
- findToken: async ({ tokenId }: { tokenId: string }, options?: mongodb.FindOptions) => {
73
- return TokenSurrogates.findOne({ _id: tokenId }, options);
74
- },
75
-
76
- findTokens: async (selector: any, options?: mongodb.FindOptions): Promise<TokenSurrogate[]> => {
77
- return TokenSurrogates.find(buildTokenFindSelector(selector), options).toArray();
78
- },
79
-
80
- tokensCount: async (selector: any = {}): Promise<number> => {
81
- const tokenCount = await TokenSurrogates.countDocuments(buildTokenFindSelector(selector));
82
- return tokenCount;
83
- },
84
-
85
- findTokensForUser: async (
86
- params: { userId: string } | { walletAddresses: string[] },
87
- options?: mongodb.FindOptions,
88
- ): Promise<TokenSurrogate[]> => {
89
- const { userId, walletAddresses } = params as any;
90
- if (!userId && !walletAddresses)
91
- throw new Error('userId or walletAddresses must be provided for findTokensForUser');
92
- const selector = {
93
- $or: [
94
- walletAddresses && {
95
- walletAddress: { $in: walletAddresses || [] },
96
- },
97
- userId && {
98
- userId,
99
- },
100
- ].filter(Boolean),
101
- };
102
-
103
- const userTokens = await TokenSurrogates.find(selector, options).toArray();
104
- return userTokens;
105
- },
106
-
107
- findProviders: async (
108
- query: mongodb.Filter<WarehousingProvider> & { includeDeleted?: boolean },
109
- options: mongodb.FindOptions = { sort: { created: 1 } },
110
- ): Promise<WarehousingProvider[]> => {
111
- const providers = WarehousingProviders.find(buildFindSelector(query), options);
112
- return providers.toArray();
113
- },
114
-
115
- allProviders: pMemoize(
116
- async function () {
117
- return WarehousingProviders.find({ deleted: null }, { sort: { created: 1 } }).toArray();
118
- },
119
- {
120
- cache: allProvidersCache,
121
- },
122
- ),
123
-
124
- providerExists: async ({
125
- warehousingProviderId,
126
- }: {
127
- warehousingProviderId: string;
128
- }): Promise<boolean> => {
129
- const providerCount = await WarehousingProviders.countDocuments(
130
- generateDbFilterById(warehousingProviderId, { deleted: null }),
131
- { limit: 1 },
132
- );
133
- return !!providerCount;
134
- },
135
-
136
- updateTokenOwnership: async (
137
- params:
138
- | {
139
- tokenId: string;
140
- userId: string;
141
- }
142
- | {
143
- tokenId: string;
144
- walletAddress: string;
145
- },
146
- ) => {
147
- const modifier: mongodb.UpdateFilter<TokenSurrogate> =
148
- 'userId' in params
149
- ? {
150
- $set: {
151
- userId: params.userId,
152
- },
153
- $unset: {
154
- walletAddress: 1,
155
- },
156
- }
157
- : {
158
- $set: {
159
- walletAddress: params.walletAddress,
160
- },
161
- $unset: {
162
- userId: 1,
163
- },
164
- };
165
- const token = await TokenSurrogates.findOneAndUpdate({ _id: params.tokenId }, modifier, {
166
- returnDocument: 'after',
167
- });
168
- if (!token) return null;
169
- await emit('TOKEN_OWNERSHIP_CHANGED', { token });
170
- return token;
171
- },
172
-
173
- invalidateToken: async (tokenId: string) => {
174
- const token = await TokenSurrogates.findOneAndUpdate(
175
- { _id: tokenId, invalidatedDate: null },
176
- {
177
- $set: {
178
- invalidatedDate: new Date(),
179
- },
180
- },
181
- {
182
- returnDocument: 'after',
183
- },
184
- );
185
- if (!token) return null;
186
- await emit('TOKEN_INVALIDATED', { token });
187
- return token;
188
- },
189
-
190
- buildAccessKeyForToken: async (tokenId: string): Promise<string | null> => {
191
- const token = await TokenSurrogates.findOne(generateDbFilterById(tokenId));
192
- if (!token) return null;
193
-
194
- const payload = [
195
- token._id,
196
- token.walletAddress || token.userId,
197
- process.env.UNCHAINED_SECRET,
198
- ].join('');
199
- const msgUint8 = new TextEncoder().encode(payload);
200
- const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
201
- const hashArray = Array.from(new Uint8Array(hashBuffer));
202
- const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
203
-
204
- return hashHex;
205
- },
206
-
207
- // Mutations
208
- create: async (
209
- doc: Omit<WarehousingProvider, '_id' | 'created'> & Pick<Partial<WarehousingProvider>, '_id'>,
210
- ) => {
211
- const { insertedId: warehousingProviderId } = await WarehousingProviders.insertOne({
212
- _id: generateDbObjectId(),
213
- created: new Date(),
214
- ...doc,
215
- });
216
-
217
- const warehousingProvider = (await WarehousingProviders.findOne({
218
- _id: warehousingProviderId,
219
- })) as WarehousingProvider;
220
- allProvidersCache.clear();
221
- await emit('WAREHOUSING_PROVIDER_CREATE', { warehousingProvider });
222
- return warehousingProvider;
223
- },
224
-
225
- update: async (warehousingProviderId: string, doc: Partial<WarehousingProvider>) => {
226
- const warehousingProvider = await WarehousingProviders.findOneAndUpdate(
227
- { _id: warehousingProviderId },
228
- {
229
- $set: {
230
- updated: new Date(),
231
- ...doc,
232
- },
233
- },
234
- { returnDocument: 'after' },
235
- );
236
- if (!warehousingProvider) return null;
237
- allProvidersCache.clear();
238
- await emit('WAREHOUSING_PROVIDER_UPDATE', { warehousingProvider });
239
- return warehousingProvider;
240
- },
241
-
242
- delete: async (providerId: string) => {
243
- const warehousingProvider = await WarehousingProviders.findOneAndUpdate(
244
- generateDbFilterById(providerId),
245
- {
246
- $set: {
247
- deleted: new Date(),
248
- },
249
- },
250
- { returnDocument: 'after' },
251
- );
252
- if (!warehousingProvider) return null;
253
- allProvidersCache.clear();
254
- await emit('WAREHOUSING_PROVIDER_REMOVE', { warehousingProvider });
255
- return warehousingProvider;
256
- },
257
- };
258
- };
259
-
260
- export type WarehousingModule = Awaited<ReturnType<typeof configureWarehousingModule>>;
@@ -1,3 +0,0 @@
1
- export * from './module/configureWarehousingModule.js';
2
- export * from './db/TokenSurrogateCollection.js';
3
- export * from './db/WarehousingProvidersCollection.js';
package/tsconfig.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "../shared/base.tsconfig.json",
3
- "compilerOptions": {
4
- "declarationDir": "./lib",
5
- "rootDir": "./src",
6
- "outDir": "./lib",
7
-
8
- },
9
- "exclude": ["**/*.test.ts", "**/*.test.js", "tests", "lib"]
10
- }